gpt4 book ai didi

linq 到 Entity Framework : use dictionary in query

转载 作者:行者123 更新时间:2023-12-03 07:35:24 24 4
gpt4 key购买 nike

我有:

Dictionary<int, List<int>> dict = new ...
var a = SomeEntity.Where(f => dict[f.key].Contains(f.someValue))

这会产生错误

 LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[System.Int32] get_Item(Int32)' method

当使用列表时它可以工作:

List<int> l = new ...
var a = SomeEntity.Where(f => l.Contains(f.someValue))

那么这是 linq to EF 的限制还是我遗漏了什么?

最佳答案

这是 Entity Framework 的本质 - 当您将表达式放入查询中时,它会尽力将它们转换为 SQL,以便可以在服务器上完成工作。

在第一个示例中,它尝试将查询和字典检索调用转换为 SQL,但无法执行,因为它不知道如何执行。

在第二个示例中,您只是将一个列表传递到查询中。它确实知道如何将其转换为 SQL。

存在一些类似的问题,因此您只需在定义 EF 查询之前注意它即可。

编辑

刚刚注意到您的第一个查询在从字典中读取时使用了查询结果。因此,由于您实际上无法将字典传递到 SQL 查询中,因此您可能需要首先从数据库中检索所有记录,然后使用 LINQ-to-objects 来执行检查,例如:

Dictionary<int, List<int>> dict = new ...
var a = SomeEntity
.ToArray()
.Where(f => dict[f.key].Contains(f.someValue));

ToArray()方法将整个结果集拉入内存(还有其他方法可以做到这一点,但这是我通常这样做的),以及以下Where 子句在 LINQ-to-objects 而不是 LINQ-to-Entities 中运行,这意味着您的字典代码将运行良好。

关于linq 到 Entity Framework : use dictionary in query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7638859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com