簡體   English   中英

linq中“and”和“wheres”之間是否存在真正的區別?

[英]Is there any real difference between “and” and “wheres” in linq

我有這個問題

 from a in objects
 where a.property1 == 2
 && a.property2 == 3
 select a

from a in objects
where a.property1 == 2
where a.property2 == 3
select a

我想知道如何執行語句以及使用任何一個語句會帶來什么好處

截至目前,我的問題是linq對象

您的第一個案例將轉換為:

objects.Where(a => a.property1 == 2 && a.property2 == 3);

而后者將轉換為:

objects.Where(a => a.property1 == 2).Where(a => a.property2 == 3);

不同之處在於后者將被過濾兩次,而第一次是在lambda中進行比較。

這是假設LINQ到對象; 其他提供商將依賴於實施。

實際上,這兩個語句是相同的,因為如果左側為真,C#僅評估AND操作的右側。

如果使用AND評​​估C#不是懶惰的,那么在大多數項目無法滿足第一個標准(或第二個標准是昂貴的評估)的情況下,順序WHERE評估可能會提供相當顯着的性能提升。 然而,就目前而言,C#默認是懶惰的,因此與懶惰評估的LINQ相當。

如果存在差異取決於底層LINQ提供程序。 LINQ提供程序負責將您的LINQ查詢轉換為基礎功能表示,例如SQL。

對我來說真正的區別在於可讀性。 兩個鏈接的語句會降低可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM