C# 如何改进用于搜索的LINQ查询

C# 如何改进用于搜索的LINQ查询,c#,linq,C#,Linq,我可以改进这个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; 如果在解决方案中可能,请添加lambda表达式。所以您至少保存了一行:) 编辑: 忘了我刚才说的吧,这要短得

我可以改进这个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;
如果在解决方案中可能,请添加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;

当前,您对每个项目执行固定值的
.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;

答案是好的,我指的是查看此链接与搜索和改进的关系

这是填写或不填写
textbox
的多选项,但当:

您是一个字段填充或两个字段填充或。。第七个字段填充

那是哪个LINQ提供商?这很重要。LINQ到对象?LINQ到SQL?等等?谢谢。这是LINQToObjects,我正在进行可观察的收集。我认为你的回答与OP问题中的LINQ不一样
var filter = from Dep in deptlist
             let name = Dep.DepNm
             where name.StartsWith(lower) || name.StartsWith(upper)
                   || name.Contains(text)) 
             select Dep;