gpt4 book ai didi

c# - 将 Func<> 传递给 IQueryable 与 Expression>

转载 作者:行者123 更新时间:2023-11-30 20:48:15 26 4
gpt4 key购买 nike

我开始深入了解 LINQ 引擎盖,但我在理解一些 LINQ 扩展方法重载时遇到了问题。

例如,假设我正在使用 .Where() 查询 DbContext。我总是传递标准 Func<>,而不是所述 Func<> 的 Expression<>。下面的示例查询:

var db = new MyContext();
var foo = db.products.Where(p => p.Category == "books");

这就是我感到困惑的地方。当我查看可用的方法签名时,我会假设我在上面使用的重载会返回一个 IEnumerable...但它实际上返回一个 IQueryable。如果 IQueryable 重载需要一个 Expression 而不仅仅是一个 Func,这怎么可能?感觉编译器通过(在这种情况下)为我构建表达式以某种方式帮助我,但我找不到解释是否是这种情况的资源。谢谢!

最佳答案

It feels like the compiler is somehow helping me out by (in this case) building the Expression for me

这正是正在发生的事情。编译器可以将 lambda(只要它们没有“语句体”)解释为委托(delegate)或表达式树。 Queryable.Where<T>(this IQuerayble<T>, ...)扩展方法优先于 Enumerable.Where<T>(this IEnumerable<T>, ...)扩展方法,因此编译器选择将您的谓词解释为表达式树。

关于c# - 将 Func<> 传递给 IQueryable 与 Expression<Func<>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24868215/

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