编写 LINQ 查询时,编写查询的风格应该遵循什么?使用查询 ( Query Syntax) 或方法 ( Method Syntax) 语法?用什么比较好?
在我看来,无论是写还是读,方法都更方便,而查询语法就不能说了。什么时候应该使用查询语法,什么时候应该使用方法语法?
我非常想更详细地了解并举例说明这种或那种编写查询的方法何时以及为何更好。出于某种原因,我并没有完全理解这篇文章LINQ (C#) 中的查询语法和方法语法,而且有些地方我的看法有所不同。
编写 LINQ 查询时,编写查询的风格应该遵循什么?使用查询 ( Query Syntax) 或方法 ( Method Syntax) 语法?用什么比较好?
在我看来,无论是写还是读,方法都更方便,而查询语法就不能说了。什么时候应该使用查询语法,什么时候应该使用方法语法?
我非常想更详细地了解并举例说明这种或那种编写查询的方法何时以及为何更好。出于某种原因,我并没有完全理解这篇文章LINQ (C#) 中的查询语法和方法语法,而且有些地方我的看法有所不同。
方法语法中的长而复杂的查询可能变得不可读 - 特别是如果经常使用匿名类。查询语法向您隐藏了这些匿名类:
尝试在没有匿名类的情况下重写上面的查询。但是在较长的查询中,可能会出现嵌套的匿名类——或者不断地从一个匿名类复制到另一个匿名类。
使用查询语法时,许多匿名类被成功隐藏:
此外,在长查询中,当使用方法时,为每个闭包编写相同的前缀很快就会变得无聊——在查询语法中,范围变量只定义了 1 次。
因此,在复杂查询中通常首选查询语法。
另一方面,有些事情在查询语法中是做不到的。
例如,take 的方法重载
IEqualityComparer只能作为方法调用。此外,方法的语法允许您根据外部条件在变量中“累积”一个复杂的查询——这在处理过滤块时很有用: