我有以下代码为我提供了来自数据库的数据:

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();

10-04 11:05