[英]Join/AND - Translate from SQL to Lambda LINQ C#
我是LINQ和Lambda的新手,老实说,我不知道如何将我的单行查询转换为LINQ lambda。有人能将我引向正确的方向吗? 谢谢
这是我的一行查询:
SELECT *
FROM
dbo.[Sales Invoice Line] innerjoin
dbo.[Sales Comment Line] ON
dbo.[Sales Invoice Line].[Line No_] = dbo.[Sales Comment Line].[Document Line No_] AND
dbo.[Sales Invoice Line].[Document No_] = dbo.[Sales Comment Line].No_
您可以像这样在Linq中进行多字段联接:
var List1 = new List<Class1>();
List1.Add(new Class1 { Field1 = 1, Field2 = 2 });
List1.Add(new Class1 { Field1 = 3, Field2 = 4 });
var List2 = new List<Class2>();
List2.Add(new Class2 { Field1 = 1, Field2 = 2 });
List2.Add(new Class2 { Field1 = 5, Field2 = 6 });
var results = List1.Join(List2,
l1 => new {l1.Field1, l1.Field2},
l2 => new {l2.Field1, l2.Field2},
(l1, l2) => new {List1 = l1, List2 = l2});
此处的密钥是2个lambdas l1 => new {l1.Field1, l1.Field2}
和l2 => new {l2.Field1, l2.Field2}
。 它们为每个表中包含您感兴趣的两个字段的行创建匿名对象。仅当两个匿名对象比较相等时,连接成功。
其中的第三个lambda只是创建要作为“ joined”值返回的对象。 您可以创建所需的任何形状,该形状只是创建一个具有.Class1
和.Class2
属性的对象,其中包含每个列表中匹配的行。 您可以根据需要将其展平,和/或添加所需的任何其他属性。
有关该语法的完整详细信息,请参见MSDN有关使用复合键的联接的页面。
我使用了以下2个替代类:
class Class1
{
public int Field1 { get; set; }
public int Field2 { get; set; }
}
class Class2
{
public int Field1 { get; set; }
public int Field2 { get; set; }
}
LINQPad文件在此处可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.