检查对象列表是否包含具有特定值的属性


73

说我有以下代码:

class SampleClass
{
    public int Id {get; set;}
    public int Name {get; set;}
}
List<SampleClass> myList = new List<SampleClass>();
//list is filled with objects
...
string nameToExtract = "test";

所以我的问题是,我可以使用什么List函数myList仅从具有与我的nameToExtract字符串匹配的Name属性的对象中提取。

如果这个问题确实很简单/很明显,我谨此致歉。


类中的Name属性SampleClass应该是string正确的类型吗?
sonyisda1年

Answers:


111

您可以使用Enumerable.Where扩展方法:

var matches = myList.Where(p => p.Name == nameToExtract);

返回IEnumerable<SampleClass>。假设您要进行过滤List,只需调用.ToList()上面的代码即可。


顺便说一句,如果我今天在上面编写代码,考虑到Unicode字符串处理的复杂性,我将以不同的方式进行相等性检查:

var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));

也可以看看


1
这是否返回所有匹配的对象nameToExtract
IAbstract

4
具体来说,所有Name属性匹配的对象nameToExtract,是。
Dan J

6
thx-是否有布尔版本(如果存在或不存在则简单地返回true或false)?
BKSpurgeon'3

15
@BKSpurgeon是的,这就是Any()方法。
Dan J


4

除了提示LINQ的其他答案之外,这种情况下的另一种选择是使用FindAll实例方法:

List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);

3
using System.Linq;    
list.Where(x=> x.Name == nameToExtract);

编辑:误读问题(现在所有匹配项)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.