C#使用Linq连接2个表,其中包含2个相同的列

时间:2012-09-21 10:44:14

标签: c# linq join var

我想加入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
    };

2 个答案:

答案 0 :(得分:3)

...试

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();

答案 1 :(得分:1)

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

来自MSDN:

  

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