0

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

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

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

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

更多技术细节

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

4

1 回答 1

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

于 2017-04-30T13:18:09.587 回答