Linq 包含两列的列表-使用部分搜索

Linq 包含两列的列表-使用部分搜索,linq,list,Linq,List,我有一个包含两列的列表,试图使用contains进行部分搜索。 Emp包含id和名称 var list = new List<Emp>(); list = list.Any(o => o.Contains(new Emp{ Name = name })); var list=newlist(); list=list.Any(o=>o.Contains(newemp{Name=Name})); 但是,它抛出了一个错误: 无法从Emp转换为system.Linq。易变的 任何关

我有一个包含两列的列表,试图使用contains进行部分搜索。 Emp包含id和名称

var list = new List<Emp>();
list = list.Any(o => o.Contains(new Emp{ Name = name }));
var list=newlist();
list=list.Any(o=>o.Contains(newemp{Name=Name}));
但是,它抛出了一个错误: 无法从Emp转换为system.Linq。易变的

任何关于这方面的意见都会很有帮助


提前感谢

不清楚您到底想做什么。您可能需要:

list = list.Where(emp => emp.Name == name).ToList();
或许

list = list.Where(emp => emp.Name.Contains(name)).ToList();
但你为什么要尝试使用
Any
,一点也不清楚

编辑:鉴于评论,我怀疑你真的想要:

list = list.Where(emp => emp.Name.StartsWith(name)).ToList();
(不过,您可能需要使其不区分大小写。)

或者,如果需要检查名称的每个部分,可以使用正则表达式或:

list = list.Where(emp => emp.Name.Split(' ')
                            .Any(x => x.StartsWith(name))).ToList();

不过,最后一种方法效率很低,因为每次您查看它时,它都会分割每个名称。。。您可能会使
Emp
对象不可变,并缓存拆分表单。或者研究正则表达式版本。无论哪种方式,您可能都不希望只使用
字符串。包含
,因为这样可以在名称中的任何位置找到匹配项。

没有显示
Emp
类也无济于事……我有一个文本框来输入名称-当我输入字母时,它应该显示以该字母开头的所有名称。这就像是对那个名字的部分搜索。所以我们使用了Contains。@testacc:这意味着您想要的是
StartsWith
,而不是
Contains
。上面的一个不起作用,因为我正在部分搜索它letter@testacc:你说的“高于一”是什么意思?我最初给出了两段代码,现在给出了三段。我怀疑你想要最后一个。。。但是你确实需要理解答案,这样你就可以自己来适应它,而不是需要逐字给你所有的东西。如果你想在谷歌上实现它,它在键入时建议正确的单词,那么这将是低效的,因为列表中的线性搜索,考虑一个自定义DS,我认为他们内部使用Trie来检查这个