[英]Linq FirstOrDefault - one liner
我有以下代码来确定一个Person
的年龄
var pList = ctx.Person.Where(x => x.Create > Date);
int Age = pList.Where(x => x.ID == "foo").FirstOrDefault().Age ?? 20;
我按ID选择一个Person
,如果它不存在,则默认值为20。
第二行无效,因为Age不能为null但是Person可以。 有没有办法让这个工作在一条线上 ? 我尝试过使用DefaultIfEmpty,但似乎没有用。
您可以使用Enumerable.DefaultIfEmpty
的重载:
int Age = pList
.Where(x => x.ID == "foo")
.Select(x => x.Age)
.DefaultIfEmpty(20)
.First();
如您所见,不再需要FirstOrdefault
,因为如果输入序列为空(id-filter没有返回任何人), FirstOrdefault
采用默认值。
你可以这样做:
int Age = pList.Where(x => x.ID == "foo").Select(x=>(int?)x.Age).FirstOrDefault() ?? 20;
无论如何,它并不漂亮,但你想尽可能地做到这一点,同时仍然计算几个潜在的NullPointerExceptions。 请不要在一个内衬中执行此操作,并且请不要使用int nullable来实现这一点。 下面的代码并不漂亮,没有经过测试,因为我目前没有这种可能性。
请注意,我建议使用long if if语句以不同的方式执行它,以实现零代码重复和可读性。
Person person = ctx.Person.Where(x => x.Create > Date && x.ID.Equals("foo")).FirstOrDefault()
int age = (person != null) ? person.Age : 20;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.