检查 LINQ 属性是否为 null

3
我有以下的代码可以从数据库中获取数据:
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,并检查用户和客户对象是否不为null。我需要这样做吗?还是ula.User.Client.prStatus会在内部连接中翻译,这个检查是不必要的?

2
这是LINQ to SQL还是Entity Framework? - Daniel A. White
1
为什么不看SQL Profiler? - Alex
4
此代码段是在检查 ula.Email 是否包含空字符串,并将 ula.Email 的所有字母转换为小写。 - Tim Schmelter
如果您正在使用C# 6。 var t =(来自proxy.eUserLoginAttempts的ula where ula.Date> = DateTime.Now && ula.Email.ToLower()。Contains(“”) ula.User? && ula.User.Client? && ula.User.Client.prStatus == 1 select ula).ToList(); - user1269016
1
@akemp:在我看来,这似乎不是有效的C#代码。而这个问题的重点是User(或User.Client)是否可能为空,因为这是一个被转换成SQL查询的表达式树。 - vgru
1个回答

3
回答你的直接问题:不,你应该先测试可空性... 关于你的代码,我真的建议用更易读的方式:
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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接