今天同事问我两个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; } }
我也不知道和别的方法比效率如何,只是记录一下而以。