我是LINQ和Lambda的新人,说实话,我不知道如何将我的一行查询翻译成LINQ lambda。任何人都可以指引我朝着正确的方向前进吗? THX
这是我的一行查询:
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_
答案 0 :(得分:0)
您可以在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}
。这些为每个表中的行创建了包含您感兴趣的两个字段的匿名对象。只有当两个匿名对象比较相等时,连接才会成功。
那里的第3个lambda只是创建了一个返回的对象,因为&#34;加入&#34;值。你可以创建你想要的任何形状,这个只是创建一个包含.Class1
和.Class2
属性的对象,其中包含每个列表中匹配的行。如果您愿意,可以将其展平,和/或添加您需要的任何其他属性。
有关此语法的完整详情,请访问joins using composite keys上的MSDN页面。
我使用了以下两个替身课程:
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文件可用here。