方法';System.Object DynamicInvoke(System.Object[])';没有支持

本文关键字:Object System 支持 DynamicInvoke 方法 | 更新日期: 2023-09-27 17:58:16

假设我有一个名为Poll的表,我想写一个LINQ扩展来列出ID属于数组的所有轮询。例如:

void Main()
{
    long[] ids = new long[]{ 1,2,3,4,5,6,7,8,9 };
    ListFail<Poll>(Poll, p => p.ID, ids); //Failed!
    ListOK<Poll>(Poll, p => p.ID, ids); //OK!
}
public void ListFail<T>(Table<T> obj, Func<T, long> idProperty, long[] ids) where T : class
{
    obj.Where(p => ids.Contains(idProperty(p))).ToList().Dump();
}
public void ListOK<T>(Table<T> obj, Func<T, long> idProperty, long[] ids) where T : class
{
    obj.ToList().Where(p => ids.Contains(idProperty(p))).ToList().Dump();
}

我不知道为什么我在ListFail 上出现错误

Method 'System.Object DynamicInvoke(System.Object[])' has no supported translation to SQL.

当我在Where之前添加ToList()时,它在ListOK上运行良好,但我当然不想得到整个Poll表。

知道吗?

方法';System.Object DynamicInvoke(System.Object[])';没有支持

Func<T, long>更改为Expression<Func<T, long>>。现在,正因为如此,EF不理解它。