C# 使用 Linq 连接具有 2 个相同列的 2 个表

Posted

技术标签:

【中文标题】C# 使用 Linq 连接具有 2 个相同列的 2 个表【英文标题】:C# Using Linq to join 2 tables with 2 same columns 【发布时间】:2012-09-13 18:52:39 【问题描述】:

我想加入 2 个表,它们有 2 个相同的列。我已经尝试过了,但在新 等于新 时出现错误。

我的代码:

var results = from table1 in table.AsEnumerable()
    join table2 in comment.AsEnumerable()
    //Comment
    on new table1.Field<string>("SignalName"), table1.Field<int?>("MessageID") 
    equals new table2.Field<string>("SignalName"), table2.Field<int?>("MessageID") 

    into prodGroup
    from table3 in prodGroup.DefaultIfEmpty()

    select new
    
       // something is there
    ;

【问题讨论】:

【参考方案1】:

试试……

var results = from r1 in table.AsEnumerable()
              join r2 in comment.AsEnumerable()
              on new 
                        signal=r1.Field<string>("SignalName"), 
                        message=r1.Field<int?>("MessageID")
                
              equals new 
                        signal=r2.Field<string>("SignalName"), 
                        message=r2.Field<int?>("MessageID")
               into prodGroup
              from r3 in prodGroup.DefaultIfEmpty();

【讨论】:

【参考方案2】:

尝试命名匿名类型的属性。

来自 MSDN:

因为匿名类型的 Equals 和 GetHashCode 方法是根据属性的 Equals 和 GetHashcode 方法定义的,所以相同匿名类型的两个实例只有在它们的所有属性都相等时才相等。

【讨论】:

以上是关于C# 使用 Linq 连接具有 2 个相同列的 2 个表的主要内容,如果未能解决你的问题,请参考以下文章

C# Linq 对重复值的完全外连接

带有 LINQ 2 SQL 连接的 Windows 服务的 C# 设计数据访问

使用 linq 连接具有不同结构的 2 个表

使用 LINQ C# 将两行合并为基于列的单行

count(*) 来自 2 个具有相同列的表

使用 LINQ 将具有相同值的多行列表连接成单行