使用List<>的LINQ查询并询问是否为空

时间:2012-07-03 15:10:59

标签: c# .net linq linq-to-sql generic-list

我有一些linq查询方法。逻辑是下一步,如果我为角色ID列表传递null,我希望所有角色都包含在进程中,但如果它有值,我只想在列表中包含id。我正在接受这个例子。

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))。你能帮帮我吗,我该怎么办?

1 个答案:

答案 0 :(得分: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();