在Linq中左联接给出错误的输出?

时间:2018-09-27 07:31:00

标签: c# linq left-join

我在两个列表中都有两个具有相同注册号的列表,我只需要第一个列表的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

我该怎么办?

1 个答案:

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