当前位置: 首页 > 编程语言 > C#

使用LINQ时&&和多个where子句有什么区别?分享

时间:2023-04-10 21:29:43 C#

使用LINQ时&&和多个where子句有什么区别?我是LINQ的新手,昨天发现您可以有多个where子句,例如:varitems=fromobjectinobjectListwhereobject.value110selectobject;或者你可以这样写:varitems=fromobjectinobjectListwhereobject.value110selectobject;两者有什么区别?第一个将被翻译为:objectList.Where(o=>o.value1o.value2>10)第二个将被翻译为:objectList.Where(o=>o.value110)所以在第一个中,你将再次过滤第一个过滤序列(第一个序列包含值<100的所有对象,第二个序列包含第一个序列中值>10的所有对象),第二个您将在同一个labda表达式中进行相同的比较。这对Linq对象有效,对于其他提供者,它取决于表达式的翻译方式。明确的答案使它有点不准确。正如@Philippe所说,第一个将被翻译为:objectList.Where(o=>o.value1o.value2>10)第二个将被翻译为:objectList.Where(o=>o.value110)但是Linq对链接的Where调用进行一些优化。如果你检查Linq的源代码,你会看到以下内容:CombinePredicates所做的是将两个谓词与它们之间的&&结合起来:所以objectList.Where(X).Where(Y)等同于objectList.Where(X&&Y)除了查询的创建时间(反正很短)和两个谓词的调用。最重要的是,它不会过滤或迭代集合两次-它是一个复合时间。第一个转换为:objectList.Where(o=>o.value1o.value2>10);而后者让你:objectList.Where(o=>o.value110);两者功能完全一样,虽然第二种这样省去了方法调用,但是性能上的差别可以忽略不计。使用对您来说更具可读性的内容。也就是说,如果你用linq来对象。如果您使用的是提供程序,则取决于它的实现方式(如果结果查询中未考虑谓词,则结果可能不是最佳的)。我只是介绍一下。SQL代码没有区别在最基本的级别上,您会得到两个Where操作而不是一个。使用Reflector是检查出现在查询表达式另一端的内容的最佳方式。它们是否针对同一事物进行优化取决于实际的LINQ提供程序——它需要获取整棵树并将其转换为另一种语法。对于LINQToObjects,它不是。C#inDepth非常适合帮助您开始这个主题。答案如何:使用&&不能保证两个表达式都会被求值(如果第一个条件为假,则第二个条件可能不会被求值)。有了两个where子句,就可以开始了。不确定这是不是真的,但对我来说听起来不错!在所有其他condition1&&condition2相同的condition1&&condition2中,为了代码可读性,我会选择condition1&&condition2版本。以上是C#学习教程:使用LINQ时&&和多个where子句有什么区别?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: