这两个查询有什么区别?
它们不是一样的,哪一个是快速的?在哪里使用后会出现什么问题?写在哪里后,使我的代码对我来说可读.我这样做错了吗?
第一个查询:
Model= (model.Where(p => p.Date.Year == yilim)
.Where(p => p.Id== 2 || p.Id== 3)
.OrderBy(m => m.Date.Month))
.ToList();
Run Code Online (Sandbox Code Playgroud)
第二个查询:
Model= (model.Where(p => p.Date.Year == yilim && (p.Id== 2 || p.Id== 3))
.OrderBy(m => m.Date.Month))
.ToList();
Run Code Online (Sandbox Code Playgroud)
没有功能差异,因为菊花链Where调用是一种逻辑AND操作,并且您正在AND将两个独立的条件放在一起.
但是,就删除编译器优化条件检查(例如短路)的能力和第二个所需的额外枚举器(道歉,那部分只适用于Linq to Objects.)Where而不是仅仅一个枚举器而言,它的效率可能略低.
如果您的代码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.
Run Code Online (Sandbox Code Playgroud)
如果a中的逻辑Where变得难以阅读,请尝试"无评论编码"并将条件填充到具有非常可读名称的方法中,然后您可以执行.Where(x => TheCustomerNameIsValid(x))或方法对其进行分组.Where(TheCustomerNameIsValid)(如果可以).这也有助于调试,因为在一个方法中放置断点比在lambda中放置断点要少一些.
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |