方法“System.Object DynamicInvoke(System.Object[])”不支持 SQL 转换

发布于 2024-11-13 14:54:58 字数 955 浏览 3 评论 0 原文

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

有什么想法吗?

Let's say that I have a table named Poll and I want to write a LINQ Extension to list all polls that have ID belong to an array. For e.g:

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();
}

I don't know why I get the error on ListFail

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

and when I added the ToList() before Where then it run well on ListOK but of course I don't want to get the whole Poll table.

Any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千里故人稀 2024-11-20 14:54:58

Func 更改为 Expression>。目前,正因为如此,EF 不理解它。

Change Func<T, long> to Expression<Func<T, long>>. Right now, because of this, EF doesn't understand it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文