LINQ to DataTable Join Query中的多个on子句

kfo*_*eck 4 c# linq datatable join linq-to-dataset

所以我有两个具有相同模式但数据不同的DataTable.我想将两个表连接在一起,其中两个字段,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")
    };
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是:

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")
    };
Run Code Online (Sandbox Code Playgroud)

但这给了我编译错误.

如何在print和id3列上将这两个表连接在一起?

问候,

凯尔

Ser*_*kiy 12

使用匿名对象加入多个字段:

    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")
        };
Run Code Online (Sandbox Code Playgroud)

请记住,匿名对象属性名称应匹配.