C# LINQ到DataTable联接查询中的多个on子句

C# LINQ到DataTable联接查询中的多个on子句,c#,linq,join,datatable,linq-to-dataset,C#,Linq,Join,Datatable,Linq To Dataset,因此,我有两个数据表,它们具有相同的模式,但数据不同。我想将两个表连接在一起,其中有两个字段,id3和print,以及相同的字段。我该如何用LINQ写这个 现在,这可以正常工作,并且不会出现编译器错误: var singOneJoin = from prod in singOneProd.Table.AsEnumerable() join agg in singOneAgg.Table.AsEnumerable() on prod.Field<string>(

因此,我有两个数据表,它们具有相同的模式,但数据不同。我想将两个表连接在一起,其中有两个字段,id3和print,以及相同的字段。我该如何用LINQ写这个

现在,这可以正常工作,并且不会出现编译器错误:

var singOneJoin =
    from prod in singOneProd.Table.AsEnumerable()
    join agg in singOneAgg.Table.AsEnumerable()
    on prod.Field<string>("print") equals agg.Field<string>("print")
    select new
    {
        print = prod.Field<string>("print")
    };
var singOneJoin=
来自singOneProd.Table.AsEnumerable()中的prod
在singOneAgg.Table.AsEnumerable()中加入agg
在产品字段(“打印”)上等于累计字段(“打印”)
选择新的
{
打印=产品字段(“打印”)
};
但我真正想要的是:

var singOneJoin =
    from prod in singOneProd.Table.AsEnumerable()
    join agg in singOneAgg.Table.AsEnumerable()
    on (prod.Field<string>("print") equals agg.Field<string>("print") &&
        prod.Field<Int32>("id3") equals agg.Field<Int32><("id3"))
    select new
    {
        print = prod.Field<string>("print")
    };
var singOneJoin=
来自singOneProd.Table.AsEnumerable()中的prod
在singOneAgg.Table.AsEnumerable()中加入agg
on(生产字段(“打印”)等于累计字段(“打印”)&&

prod.Field(“id3”)等于agg.Field使用匿名对象连接多个字段:

    var singOneJoin =
        from prod in singOneProd.Table.AsEnumerable()
        join agg in singOneAgg.Table.AsEnumerable()
        on new {
            Print = prod.Field<string>("print"),
            Id3 = prod.Field<Int32>("id3")
        } equals new {
            Print = agg.Field<string>("print"),
            Id3 = agg.Field<Int32>("id3")
        } 
        select new {
            print = prod.Field<string>("print")
        };
var singOneJoin=
来自singOneProd.Table.AsEnumerable()中的prod
在singOneAgg.Table.AsEnumerable()中加入agg
在纽约{
打印=产品字段(“打印”),
Id3=产品字段(“Id3”)
}等于新的{
打印=累计字段(“打印”),
Id3=聚合字段(“Id3”)
} 
选择新的{
打印=产品字段(“打印”)
};
请记住,匿名对象属性名称应匹配。

可能重复的