2015-08-18 2 views
3

У меня есть следующий код, который дает мне данные из базы данных:Проверьте свойство для нулевой LINQ

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 от клиента юридического лица и проверить пользователя и объект клиента, если они не равны нулю , Должен ли я это сделать или ula.User.Client.prStatus будет переводить в Inner Join, и эта проверка не нужна?

+2

это linq для sql или сущности framework? –

+1

Почему бы не посмотреть на SQL Profiler? – Alex

+4

'ula.Email.ToLower(). Содержит (" ")' ?? –

ответ

3

Отвечая на ваш прямой вопрос: НЕТ, вы должны проверить Nullable первый ... О коде, я действительно предлагаю читаемый путь:

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(); 
Смежные вопросы