首页 > 解决方案 > Left Join Linq 查询条件未过滤

问题描述

我正在尝试进行左联接,即 1 个用户记录有 1 个(如果存在)与之关联的联系人记录。当它运行时,它仍然会拉多个联系人,而忽略我的 'where c.RecordType == "USR"' 的条件。

 public class Users
{
    public int Id { get; set; }
    ... other properties

     public Contact Contact { get; set; }
}

    public class Contact
{
    public int Id { get; set; }
    public int RecordID { get; set; }
    public string RecordType { get; set; }

    [ForeignKey("RecordID")]
    public Users User { get; set; } 
}

Linq 查询

var query3 = (from c in db1.Contacts
                      join u in db1.Users
                      on c.RecordID equals u.Id
                      into a
                      from b in a.DefaultIfEmpty(new Models.Users())
                      where c.RecordType == "USR"
                      && b.Lastname.Contains(name)
                      && b.Active == 1
                      select new
                      {
                          b.Id,
                          b.FirstName,
                          b.Lastname,
                          b.FullName,
                          b.Contact                          
                      }).ToList();

任何有关我出错的地方的帮助将不胜感激。

谢谢,亚当

标签: c#linq

解决方案


您可以在不使用 join 关键字的情况下在 linq 中进行连接。我将以下构造用于左连接并且没有任何问题。

var query3 = (from c in db1.Contacts
              from u in db1.Users.Where(x => c.RecordID == x.Id).DefaultIfEmpty() 
              where (c.RecordType == "USR")
                  && u.Lastname.Contains(name) && (u.Active == 1)
              select new
              {
                  u.Id,
                  u.FirstName,
                  u.Lastname,
                  u.FullName,
                  u.Contact                          
               }).ToList();

推荐阅读