我有一个包含以下结构的列表。
class CompareDesignGroup
{
string FieldId;
string Caption;
}
该列表包含上述结构的项目。
如果 FieldId 已知,是否可以检索列表的元素?
您可以在通用列表类上使用Find 方法。find 方法采用一个谓词,可让您过滤/搜索列表中的单个项目。
List<CompareDesignGroup> list = // ..;
CompareDesignGroup item = list.Find(c => c.FieldId == "SomeFieldId");
item
如果列表中没有匹配项,则为 null。
如果您需要查找多个项目,可以使用FindAll 方法:
List<CompareDesignGroup> list = // ..;
List<CompareDesignGroup> result= list.FindAll(c => c.FieldId == "SomeFieldId");
您可以使用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");
是的。使用LINQ或List
.
您可以像这样使用 LINQ:
CompareDesignGroup result = yourList.FirstOrDefault(x => x.FieldId == yourKnownId);
如果您使用该FirstOrDefault
方法,result
则null
当列表不包含具有已知 ID 的记录时。所以在使用之前result
检查它是否不是null
。
有很多方法可以在列表中查找项目。
LINQ提供了扩展方法,可用于处理不提供自己的搜索功能的集合(或者当您没有集合本身但具有通用接口时IEnumerable<T>
)。如果您有一个List<CompareDesignGroup>
对象并且您将处理该对象,您可以使用该类提供的方法(专用方法几乎总是比 LINQ 方法快,它们知道集合的内部结构并且不必依赖许多抽象层)。
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 扩展方法,我建议大家都看看,以找到更适合您需求的方法。
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