2

假设我有一个名为的表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.

当我添加ToList()之前Where,它运行良好,ListOK但我当然不想得到整张Poll桌子。

任何想法?

4

1 回答 1

2

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

于 2011-06-03T11:47:33.850 回答