Linq LeftJoin 取不同和想同的对像

今天同事问我两个List里怎么取不同的,我想到了SQL里用LEFT JOIN 然后在通过WHERE 里判断表里的某个字段为空就可以达到目的于是有了下面的LINQ

  [TestMethod]
        public void LinqLeftJoinTest()
        {
            List<DoHTEModelDTO> ali = new List<DoHTEModelDTO>();
            List<DoHTEModelDTO> bli = new List<DoHTEModelDTO>();
            DoHTEModelDTO a = new DoHTEModelDTO();
            a.hteId = 1;
            a.userId = 1;
            ali.Add(a);

            a = new DoHTEModelDTO();
            a.hteId = 2;
            a.userId = 2;
            ali.Add(a);

            a = new DoHTEModelDTO();
            a.hteId = 3;
            a.userId = 3;
            ali.Add(a);


            a = new DoHTEModelDTO();
            a.hteId = 1;
            a.userId = 1;
            bli.Add(a);


            a = new DoHTEModelDTO();
            a.hteId = 2;
            a.userId = 2;
            bli.Add(a);


            var ss = (from a1 in ali
                     join b in bli on a1.userId equals b.userId into temp
                     from tt in temp.DefaultIfEmpty()
                     where tt==null
                     select new { UserId = a1.userId }).ToList();


            var ss2 = (from a1 in ali
                      join b in bli on a1.userId equals b.userId into temp
                      from tt in temp.DefaultIfEmpty()
                      where tt!= null
                      select new { UserId = tt.userId }).ToList();


            Assert.IsNotNull(ss);
 
        }
       

     
    }
}

    public class DoHTEModelDTO
    {
        public Int64 hteId { get; set; }
        public Int64 userId { get; set; }
        public bool submit { get; set; }
        
    }
View Code

我也不知道和别的方法比效率如何,只是记录一下而以。

原文地址:https://www.cnblogs.com/godgirl9111/p/7338020.html