C# 如何改进用于搜索的LINQ查询
我可以改进这个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表达式。所以您至少保存了一行:) 编辑: 忘了我刚才说的吧,这要短得
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;