単純なLinqの選択が機能しない

asp.net-core c# entity-framework-core entity-framework-plus linq

質問

私は整数のリストを選択しようとしており、例外が発生しています。

例外メッセージ:System.ArgumentException:型 'System.Collections.Generic.IAsyncEnumerable1 [System.Int32]'の式は、 'System'の 'System.Collections.Generic.IAsyncEnumerable1 [System.Object]'型のパラメータには使用できません。 Collections.Generic.IAsyncEnumerable1 [MyProject.Model.Entities.MyTable] CastModel 'パラメータ名:arg0

再現する手順

モデル

public class MyTable { 
  public int MyTableId { get; set; } 
  public int SomeKey { get; set; } 
  public int MyFieldIntegerIWant { get; set; } 
} 

以下のクエリを実行します(またはそのようなクエリを実行します)。

public class MyTable { 
  public int MyTableId { get; set; } 
  public int SomeKey { get; set; } 
  public int MyFieldIntegerIWant { get; set; } 
} 

さらなる技術的詳細

EFコアバージョン:1.1.0

データベースプロバイダ:Microsoft.EntityFrameworkCore.SqlServer

オペレーティングシステム:Windows 7

IDE:Visual Studio 2015

更新:

The issue had something to do with EF Plus' QueryFilters https://github.com/zzzprojects/EntityFramework-Plus/issues/133と関係がありました

エキスパート回答

@thejasonとの議論の後、

この問題は、 Entity Framework Plusが原因ではなく、EFコアがどのようにキャストを処理するかによって発生しました。

この問題は、次のコードを使用して簡単に再現できます。

using (var ctx = new CurrentContext())
{
    int keyId = 1;

    var ids = ctx.MyTables
        .Cast<IMyTable>()
        .Cast<MyTable>()
        .Where(x => x.SomeKey.Equals(keyId))
        .Select(x => x.MyFieldIntegerIWant)
        .ToList();
}

キャスト方法はEF Core 2.xで修正されます




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ