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



我有一些使用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;
            }
        }

这部分正在中断 (收件人角色 == 空 || 收件人角色.包含(角色.角色 ID))。你能帮我这个吗,我该怎么办?

为了简化调试,请将查询分解为如下所示的部分:

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();

最新更新