2009-12-18 2 views
1

У меня есть этот код. Как проверить нулевые значения с помощью метода SingleOrDefault?Как проверить нулевые значения с помощью LINQ

public static List<ETY.Rol> GetRolesByApplicationAndCompany(this UsuarioContext usuario, int company, int app) 
     { 
      List<ETY.Company> lCompanies= usuario.Companies; 

      var roles = lCompanies. 
       SingleOrDefault(e => (e.Id == company)).Applications. 
       SingleOrDefault(a => a.Id == app).Roles; 
      return roles; 

     } 

ответ

0

ли вы имеете в виду возвращение нулевой или пустой список, если какой-либо из SingleOrDefault возвращает нуль? В этом случае:

var company = lCompanies.SingleOrDefault(e => (e.Id == company)); 
if(company != null) { 
    var application = company.Applications.SingleOrDefault(a => a.Id == app); 
    if(application!=null) { 
     return application.Roles; 
    } 
} 
return null; //Or: return new List<ETY.Rol>(); 
1

Вы можете попробовать глядя на метод расширения Может быть/IfNotNull (here и here).

Или использовать Linq синтаксис что-то вроде этого (непроверенные):

var q = from company in lCompanies.SingleOrDefault(e => e.Id == company) 
     where company != null 
     let application = company.Applications.SingleOrDefault(a => a.Id == app) 
     where application != null 
     select application.Roles; 

(Greg Beech's answer лучше, если одно условие гарантировано)

+0

Я уверен, что ваша первая строка не будет компилироваться, как он будет возвращать одну компанию, которая не является IEnumerable . –

0

Вместо использования SingleOrDefault вы могли бы написать прикован запрос следующим образом. Вы теряете семантику обеспечения того, что существует только одно приложение или компания, но если вы знаете, что это всегда так, это не должно быть проблемой.

return from c in lCompanies where c.Id == company 
     from a in c.Applications where a.Id == app 
     select a.Roles;