如何使用linq返回过滤列表?

时间:2011-03-23 18:53:54

标签: c# linq

我不确定我的标题是否正确,但是linq应该聘请合适的专家来帮助标题并回答问题。

如果我有人员列表,如何返回PeopleWrappers列表减去“Dave”和“Jane”?

查询现在看起来像这样:

List<Person> People = CreatListofPersons();
People.Select(t => new PeopleWrapper(t)).ToArray();

3 个答案:

答案 0 :(得分:5)

People.Where( x => x.Name!="Dave" && x.Name!="Jane")
      .Select(t => new PeopleWrapper(t))
      .ToArray();

LINQ有一个扩展方法列表,允许您过滤或项目(已经使用Select())。在您的情况下,您可以使用Where()指定要传递的元素,在您的示例中,所有名称既不是Dave也不是Jane的人。

  

如果之前有“Where”,那有关系吗?   “选择”还是之后?

您通常希望尽快过滤,否则您将不得不对您不想要的项目进行迭代和/或投影。

从概念上讲,是的,您可以稍后将where()过滤器放在您使用PeopleWrapper投影后处理Select()的情况下 - 由于Where()扩展方法使用此数据类型作为输入,因此我认为它没有多大意义 - 你会过滤人包装器,而不是人。

答案 1 :(得分:0)

return People.Where(p => p.Name != "Dave" && p.Name != "Jane");

答案 2 :(得分:0)

您可以使用Where获取与条件匹配的元素:

People.Where(p => p.name != "Dave" && p.name != "Jane" ).Select(t => new PeopleWrapper(t)).ToArray()