簡體   English   中英

如何改進此LINQ查詢以進行搜索

[英]How to improve this LINQ query for search

我可以改進這個LINQ查詢嗎?

var filter = from Dep in deptlist
where (Dep.DepNm.StartsWith(txt1.Text.ToLower()) 
  || Dep.DepNm.StartsWith(txt1.Text.ToUpper())
  ||Dep.DepNm.Contains(txt1.Text)) 
select Dep;

目前,您為每個項目執行固定值.Text.Text.ToUpper().Text.ToLower() ; ToUpper()等相對昂貴); 你可以解除這個:

string text = txt1.Text, upper = text.ToUpper(), lower = text.ToLower();
var filter = from Dep in deptlist
             where Dep.DepNm.StartsWith(lower) || Dep.DepNm.StartsWith(upper)
                   || Dep.DepNm.Contains(text)) 
             select Dep;

我在這里假設 .DepNm非常便宜。 如果這實際上是一個昂貴的查詢屬性,您可以使用let來最小化調用:

var filter = from Dep in deptlist
             let name = Dep.DepNm
             where name.StartsWith(lower) || name.StartsWith(upper)
                   || name.Contains(text)) 
             select Dep;
var filter = from Dep in deptlist
where Dep.where(d => d.DepNm.ToUpper().Conatins(txt1.Text.ToUpper())) 
select Dep;

如果在您的解決方案中可以,則添加lambda表達式。 所以你至少保存了一行:)


編輯:忘掉我說的話,這要短得多:

var filter = deptlist.where(d => d.DepNm.ToUpper().Conatins(txt1.Text.ToUpper())).ToList();

我認為它更快,因為條件較少。

var filter = from Dep in deptlist
where (Dep.DepNm.StartsWith(txt1.Text, StringComparison.OrdinalIgnoreCase))
||Dep.where(d => d.DepNm.ToUpper().Contains(txt1.Text.ToUpper()))
select Dep;

答案是好的,我參考這個鏈接與搜索和改進的關系使用查詢linq搜索空字段

這是填充或不填充textbox多種選擇,但這個答案適用於:
你是一個田間填充或兩個現場填充或..第7場填充。

暫無
暫無

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

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