假設這是LINQ到對象,它絕對會做到這一點(乃至Element
調用)的searchWords
每個元素。隱含着它無處可存的狀態去做任何事情。你雖然可以輕鬆地優化這個自己:
var products = from d in xElem.Descendants(fileName)
let lowerD = d.Element(productName).Value.ToLower()
where searchWords.All(t => lowerD.Contains(t))
或者在非查詢表達式,你可以使用一個語句的λ:
var products = xElem.Descendants(fileName)
.Where(d => {
string lowerD = d.Element(productName).Value.ToLower();
return searchWords.All(t => lowerD.Contains(t));
})
... // rest of query
注意,有執行不區分大小寫的比較它們的其他方式更強大。例如:
var products = from d in xElem.Descendants(fileName)
let v = d.Element(productName).Value
where searchWords.All(t =>
v.IndexOf(t, StringComparison.CurrentCultureIgnoreCase) != -1)
在您的第一個示例中。每次選擇都不會評估ToLower()嗎? – 2012-02-15 07:32:32
@NaveedButt:它會爲每個元素執行一次,而不是每個元素/ searchWord組合執行一次。它必須爲每個元素執行一次,因爲每個元素都可以有不同的內容! – 2012-02-15 07:35:35
喬恩,你真了不起!我將在下週到達時閱讀你的書! – RJIGO 2012-02-15 07:41:12