来自Collection C#的Linq过滤器

时间:2016-03-11 12:22:36

标签: c# linq

我有一群人,我需要过滤掉#34; status" property为null。

Person p = (from p in house.People where p.status == null)

如何从状态为null的集合中获取此人? 感谢

4 个答案:

答案 0 :(得分:2)

如果您只期望一个状态为null的人,您可以使用First / FirstOrDefault

Person p = (from p in house.People where p.status == null).FirstOrDefault();

或方法语法

Person nullStatusPerson = house.People.FirstOrDefault(p => p.status == null);

如果没有状态为null的人,则为null

如果您希望状态为null的所有人都可以创建一个集合:

List<Person> nullStatusPersons =  house.People.Where(p => p.status == null).ToList();

最后,如果有多个人的状态为Single,则可以使用SingleOrDefault / null如果是错误的话。然后会抛出InvalidOperationException

答案 1 :(得分:1)

该集合有可能有多个符合您条件的项目,因此您通常希望获得整个匹配集并循环遍历它。

List<Person>适合保存匹配的实例:

List<Person> p = (from p in house.People where p.status == null).ToList();

如果你真的想要一个,那就得到第一个项目:

Person p = (from p in house.People where p.status == null).FirstOrDefault();

答案 2 :(得分:1)

试试这个:

var person = house.People.FirstOrDefault(x=>x.status==null)

答案 3 :(得分:1)

您只能使用First返回一个结果:

Person p = house.People.First(p => p.status == null);

如果没有找到任何元素,这将抛出异常。如果您想避免这种情况,请返回null而不是FirstOrDefault。如果您只想要一个元素,那么您也可以使用SingleSingleOrDefault,如果找到多个元素,则会抛出异常。