2012-07-03 5 views
-1

linq 쿼리를 사용하는 몇 가지 방법이 있습니다. 논리는 다음으로 역할 ID 목록에 null을 전달하면 모든 역할이 프로세스에 포함되기를 원하지만 가치가있는 경우 목록에 ID가있는 역할 만 필요합니다. 나는 exeption을 받고있다.List <>가있는 LINQ 쿼리와 null이 있는지 묻는 메시지

public static List<NameEmail> GetNameEmailPairs(Guid guid, List<int> recipientRoles) 
     { 
      using (var tc = TransactionContext()) 
      { 
       var dc = tc.DataContext; 

       var nameEmailPairs = (
           from email in dc.Emails 
           join logon in dc.Logons on email.GUID equals logon.GUID          
           join eLogon in dc.ELogons on logon.UID equals eLogon.LogonGUID       
           join role in dc.Roles on entityLogon.PrimaryPermissionRoleID equals role.RoleID 
           where 
            (recipientRoles == null || recipientRoles.Contains(role.RoleID)) 

           select new NameEmail 
              { 
               Email = email.EmailAddress, 
               FullName = GetName(logon.GUID) 
              } 
          ) 
        .ToList(); 
       return nameEmailPairs; 
      } 
     } 

이 부분은 깨졌습니다 (recipientRoles == null || recipientRoles.Contains (role.RoleID)). 이걸로 제발 도와 주실 수 있나요? 어떻게해야합니까?

+5

정확히 어떤 예외를 받고있다? –

+0

System.ArgumentNullException : 값은 null 일 수 없습니다. 매개 변수 이름 : source at System.Linq.Enumerable.OfType [TResult] (IEnumerable source) – Cemsha

+0

"recipientRoles"매개 변수가 null 인 경우이 예외가 발생합니다. – Cemsha

답변

2

쉽게 디버깅을 만들려면,이 같은 조각에 검색어를 나눌 :

var nameEmailPairs = (
    from email in dc.Emails 
    join logon in dc.Logons on email.GUID equals logon.GUID          
    join eLogon in dc.ELogons on logon.UID equals eLogon.LogonGUID       
    join role in dc.Roles on entityLogon.PrimaryPermissionRoleID equals role.RoleID 
    select new {email, role} 
); 

if(recipientRoles != null) 
{ 
    nameEmailPairs = nameEmailPairse.Where(
     recipientRoles.Contains(p => p.role.RoleID) 
    ); 
} 

var nameEmailPairs = (from p in nameEmailPairs 
        select new NameEmail 
           { 
            Email = email.EmailAddress, 
            FullName = GetName(logon.GUID) 
           }).ToList(); 
+0

디버깅을위한 것은 아닙니다. 이것은 변수 존재에 의존하는 조건으로 linq 쿼리를 확장하는 방법입니다. 또한 ArgumentNullException을 해결합니다. –