我不确定我的标题是否正确,但是linq应该聘请合适的专家来帮助标题并回答问题。
如果我有人员列表,如何返回PeopleWrappers列表减去“Dave”和“Jane”?
查询现在看起来像这样:
List<Person> People = CreatListofPersons();
People.Select(t => new PeopleWrapper(t)).ToArray();
答案 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()