我有以下代码为我提供了来自数据库的数据:
var t = (from ula in proxy.eUserLoginAttempts
where ula.Date >= DateTime.Now && ula.Email.ToLower().Contains("")
&& ula.User != null
&& ula.User.Client != null
&& ula.User.Client.prStatus == 1
select ula).ToList();
在这种情况下,我将从客户端实体获取prStatus,并检查User和Client对象是否不为null。我应该这样做还是将ula.User.Client.prStatus转换为内部联接,而此检查是不必要的?
最佳答案
回答您的直接问题:不,您应该首先测试可空值...
关于您的代码,我确实建议一种可读的方式:
var t = proxy.eUserLoginAttempts
.Where(ula => ula.Date >= DateTime.Now)
.Where(ula => !string.IsNullOrEmpty(ula.Email))
.Where(ula => ula.User != null)
.Where(ula => ula.User.Client != null)
.Where(ula => ula.User.Client.prStatus == 1)
.ToList();
甚至与C#6更好
var t = proxy.eUserLoginAttempts
.Where(ula => ula.Date >= DateTime.Now)
.Where(ula => !string.IsNullOrEmpty(ula.Email))
.Where(ula => ula.User?.Client?.prStatus == 1)
.ToList();