【问题标题】:Multiple on clause in LINQ to DataTable Join QueryLINQ to DataTable 连接查询中的多个 on 子句
【发布时间】:2013-11-06 13:44:45
【问题描述】:

所以我有两个具有相同架构但数据不同的数据表。我想将两个表连接在一起,其中两个字段 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 =
    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")
    };

但这会给我编译器错误。

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

问候,

凯尔

【问题讨论】:

标签: c# linq join datatable linq-to-dataset


【解决方案1】:

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

    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")
        };

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多