簡單的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 Core版本: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 Core如何處理。

使用以下代碼可以輕鬆複製該問題:

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();
}

Cast方法將在EF Core 2.x中修復





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因