0

我有一个包含以下结构的列表。

class CompareDesignGroup
{
    string FieldId;
    string Caption;
}

该列表包含上述结构的项目。

如果 FieldId 已知,是否可以检索列表的元素?

4

6 回答 6

6

您可以在通用列表类上使用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");
于 2012-05-15T08:52:05.347 回答
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");
于 2012-05-15T08:52:01.523 回答
2

是的。使用LINQList.

于 2012-05-15T08:52:17.853 回答
2

您可以像这样使用 LINQ:

CompareDesignGroup result = yourList.FirstOrDefault(x => x.FieldId == yourKnownId);

如果您使用该FirstOrDefault方法,resultnull当列表不包含具有已知 ID 的记录时。所以在使用之前result检查它是否不是null

于 2012-05-15T08:52:47.027 回答
2

有很多方法可以在列表中查找项目。

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 扩展方法,我建议大家都看看,以找到更适合您需求的方法。

于 2012-05-15T09:24:19.907 回答
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
于 2012-05-15T08:52:48.903 回答