我在两个列表中都有两个具有相同注册号的列表,我只需要第一个列表的Id属性和第二个列表的两个属性,但是我得到5条记录作为输出,但是我只需要3条记录,如下面的输出所述。您可以找到以下代码:
List<A> lstA = new List<A>();
lstA.Add(new A { Id = 1, Name = "A", Reg = 3 });
lstA.Add(new A { Id = 2, Name = "B", Reg = 4 });
lstA.Add(new A { Id = 3, Name = "C", Reg = 5 });
List<A> lstB = new List<A>();
lstB.Add(new A { Id = 4, Name = "D", Reg = 3 });
lstB.Add(new A { Id = 5, Name = "E", Reg = 3 });
lstB.Add(new A { Id = 6, Name = "F", Reg = 5 });
var query = from a in lstA
join b in lstB on a.Reg equals b.Reg
select new { a.Id, b.Name, b.Reg };
var output = query.ToList();
但是我需要以下输出:
ID Name Reg
1 D 3
1 E 3
3 F 5
但是它返回以下内容:
ID Name Reg
4 A 3
5 A 3
4 A 5
5 A 5
6 AB 5
我该怎么办?
答案 0 :(得分:3)
您正在将所有对象添加到lstA
。将对象添加到lstB
以获得期望的结果。
对于给定的结果,您不需要Left Join
,而且您的代码都没有。
List<A> lstA = new List<A>();
lstA.Add(new A { Id = 1, Name = "A", Reg = 3 });
lstA.Add(new A { Id = 2, Name = "B", Reg = 4 });
lstA.Add(new A { Id = 3, Name = "C", Reg = 5 });
List<A> lstB = new List<A>();
lstB.Add(new A { Id = 4, Name = "D", Reg = 3 });
lstB.Add(new A { Id = 5, Name = "E", Reg = 4 });
lstB.Add(new A { Id = 6, Name = "F", Reg = 5 });
var output = (from a in lstA
join b in lstB on a.Reg equals b.Reg
select new { a.Id, b.Name, b.Reg }).ToList();