方法“System.Object DynamicInvoke(System.Object[])”不支持 SQL 转换
假设我有一个名为 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
表。
有什么想法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将
Func
更改为Expression>
。目前,正因为如此,EF 不理解它。Change
Func<T, long>
toExpression<Func<T, long>>
. Right now, because of this, EF doesn't understand it.