gpt4 book ai didi

c# - Linq如何正确使用where

转载 作者:太空狗 更新时间:2023-10-30 00:04:51 24 4
gpt4 key购买 nike

这两个查询有什么区别?

它们是不是一样,哪个速度快?在where之后用where会有什么问题吗?在哪里之后写哪里使我的代码对我来说是可读的。我做错了吗?

第一个查询:

   Model= (model.Where(p => p.Date.Year == yilim)
.Where(p => p.Id== 2 || p.Id== 3)
.OrderBy(m => m.Date.Month))
.ToList();

第二个查询:

  Model= (model.Where(p => p.Date.Year == yilim && (p.Id== 2 || p.Id== 3))
.OrderBy(m => m.Date.Month))
.ToList();

最佳答案

没有功能差异,因为菊花链式Where 调用是逻辑AND 操作,而您当前是AND 将两个单独的条件组合在一起。

但是,就移除编译器优化条件检查(例如短路)和第二个 Where 所需的额外枚举器的能力而言,它的效率可能会稍低> 而不是只有一个枚举器。 (抱歉,该部分仅适用于 Linq to Objects。)

如果您的代码是OR条件,则只有第二个查询会提供您想要的内容:

Model= (model.Where(p => p.Date.Year == yilim || p.Id== 2 || p.Id== 3)
.OrderBy(m => m.Date.Month))
.ToList();

// Cannot express the above query in simple daisy-chained Where calls.

如果 Where 中的逻辑变得难以阅读,请尝试“无注释编码”并将条件填充到具有易读名称的方法中,然后您可以执行 .Where( x => TheCustomerNameIsValid(x)),或对其进行分组的方法.Where(TheCustomerNameIsValid)(如果可以)。这也有助于调试,因为在方法中放置断点比在 lambda 中放置断点要简单一些。

关于c# - Linq如何正确使用where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26839533/

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