我有一个包含以下结构的列表。
class CompareDesignGroup
{
string FieldId;
string Caption;
}
该列表包含上述结构的项目。
如果已知FieldId,是否可以检索列表中的元素?
答案 0 :(得分:5)
您可以在通用列表类中使用Find method。 find方法采用一个谓词,允许您过滤/搜索单个项目的列表。
List<CompareDesignGroup> list = // ..;
CompareDesignGroup item = list.Find(c => c.FieldId == "SomeFieldId");
如果列表中没有匹配项, item
将为null。
如果您需要查找多个项目,可以使用FindAll method:
List<CompareDesignGroup> list = // ..;
List<CompareDesignGroup> result= list.FindAll(c => c.FieldId == "SomeFieldId");
答案 1 :(得分:2)
您可以使用Where
然后使用FirstOrDefault
。这是一个LINQ表达式。
var ls = new List<CompareDesignGroup>();
var result = ls.Where(a => a.FieldId=="123").FirstOrDefault();
或SingleOrDefault
获取您想要的项目。像这样:
var ls = new List<CompareDesignGroup>();
var result = ls.Where(a => a.FieldId=="123").SingleOrDefault()
甚至更简单:
var result = ls.SingleOrDefault(a => a.FieldId=="123");
var result2 = ls.FirstOrDefault(a => a.FieldId=="123");
答案 2 :(得分:2)
是。使用LINQ或List
的内置功能。</ p>
答案 3 :(得分:2)
您可以像这样使用LINQ:
CompareDesignGroup result = yourList.FirstOrDefault(x => x.FieldId == yourKnownId);
如果您使用FirstOrDefault
方法,则当列表中不包含已知ID的记录时,result
将为null
。因此,在使用result
之前,请检查它是否为null
。
答案 4 :(得分:1)
List<CompareDesignGroup> listData = new List<CompareDesignGroup>(); // init the data
var result = listData.Where(x=> String.Equals(x.FieldID,"FIELDID KNOWN VALUE"); // gets all data
var first = listData.FirstOrDefault(x=> String.Equals(x.FieldID,"FIELDID KNOWN VALUE"); // gets first search result
答案 5 :(得分:1)
有很多方法可以在列表中找到一个项目。
LINQ提供了一些扩展方法,可用于处理不提供自己的搜索功能的集合(或者当您没有集合本身但只有IEnumerable<T>
这样的通用接口时)。如果您有一个List<CompareDesignGroup>
对象,并且您将使用该类提供的方法(specialized methods are almost always faster than LINQ methods,那么它们可以使用该类提供的方法,它们知道集合的内部结构,并且不必依赖于许多抽象层)
在所有示例中,我将对FieldId
的假设id
参数执行文化不变量和区分大小写的比较。这可能不是您所需要的,您可能需要根据您的要求进行更改。
List<T>
给出一个声明为:
的列表List<CompareDesignGroup>() list = new List<CompareDesignGroup>();
要查找与搜索条件匹配的第一个元素(如果未找到任何项目,则会返回null
):
CompareDesignGroup item = list.Find(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
要查找所有符合搜索条件的元素:
List<CompareDesignGroup> items = list.FindAll(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
IEnumerable<T>
(或IList<T>
)给出一个声明为:
的列表IEnumerable<CompareDesignGroup> list = ...
要查找与搜索条件匹配的第一个元素(null
,如果未找到任何项目):
CompareDesignGroup item = list.FirstOrDefault(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
要查找与搜索条件匹配的第一个元素(如果未找到任何项目,则抛出异常):
CompareDesignGroup item = list.First(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
要查找符合搜索条件的所有元素:
IEnumerable<CompareDesignGroup> item = list.Where(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
有很多LINQ扩展方法,我建议大家一起来找一个更适合你需求的方法。