简单的Linq选择不工作

时间:2017-02-24 14:33:26

标签: c# linq asp.net-core entity-framework-core entity-framework-plus

我正在尝试选择一个整数列表,它会引发异常。

  

异常消息:System.ArgumentException:类型的表达式   'System.Collections.Generic.IAsyncEnumerable1 [System.Int32]'不能   用于类型的参数   'System.Collections.Generic.IAsyncEnumerable1 [System.Object]'的   方法   “System.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; } 
} 

运行下面的查询(或类似的查询):

int keyId;
var ids = await context.MyTable.AsNoTracking()
        .Where(x => x.SomeKey.Equals(keyId))
        .Select(x => x.MyFieldIntegerIWant)
        .ToListAsync();

进一步的技术细节

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

1 个答案:

答案 0 :(得分:0)

与@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中修复