【发布时间】:2020-11-24 15:07:58
【问题描述】:
编辑
其实这个问题应该更笼统:How to modify query to DB if Linq with IQueryable 报错?
据我所知,正确的答案是在数据库级别完成尽可能多的查询。因为在这种特殊情况下,我的复杂查询无法从 Linq 转换为 sql。
所以我刚刚用FromSqlRaw() 方法编写了一个原始的sql 查询,错误就消失了。此外,我以不采用所有条目(带有过滤)的方式编写查询,而不是 ToList() 方法,因此我对性能的怀疑较少(尽管我没有测量它)。
在了解如何使用 linq 将 List 转换为 IQueryable 时需要一些帮助。
我有什么: DB 中的三个表,其中一个具有基于 IQueryable 的查询。
我需要什么: 创建一个查询,通过 Linq 组合来自三个表的数据,并为我提供一个带有按此列过滤功能的表的每个元素的数据的特定列。
我的尝试:
补充基于 IQueryable 的查询。但我发现List 到IQueryable 的转换存在问题。方法AsQueryable() 报错。
我的成就: 我在 Linq 中使用基于列表的逻辑重写查询,它给了我我需要的东西。但我不明白:
- 这种做法好吗?
- 为什么我必须经常进行
ToList()转换以避免错误? - 我的解决方案的速度是否比基于 IQueryable 的方法更差?
这是我的练习:https://dotnetfiddle.net/BAKi6r
我需要什么我得到listF var。
我将其中的 CreateAsync 方法完全替换为 List 的 Create 方法。好吗?
我还尝试使用带有CreateAsync 方法/items2moq、items3moq/ 的硬编码列表,但它们使用过滤后的基于列表的查询会给出The provider for the source IQueryable doesn't implement IAsyncQueryProvider 错误。当我使用IQueryable 代替NamesIQ 而不是List 代替NamesList 时,我也得到了Argument types do not match 错误。这个错误的确切来源是什么?
【问题讨论】:
-
99.9% 的时间,
AsQueryable没有任何用处。 -
这感觉像是一个 XY 问题 (meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。您要解决的潜在问题是什么?
标签: c# linq iqueryable