C# 使用lambda语法使用匿名类型的多个linq联接

C# 使用lambda语法使用匿名类型的多个linq联接,c#,linq,join,lambda,C#,Linq,Join,Lambda,我得到了一个类似这样的查询,它的工作原理如下: ColumnA .Join(ColumnB, ColumnA => ColumnA.value, ColumnB => ColumnB.value, (ColumnA, ColumnB) => new {ColumnA, ColumnB}) .Join(ColumnC, join1 => join1.ColumnA.value,

我得到了一个类似这样的查询,它的工作原理如下:

ColumnA
    .Join(ColumnB, 
        ColumnA => ColumnA.value, 
        ColumnB => ColumnB.value, 
        (ColumnA, ColumnB) =>  new {ColumnA, ColumnB})
    .Join(ColumnC, 
        join1 => join1.ColumnA.value, 
        ColumnC => ColumnC.value, 
        (join1, ColumnC) =>  new {join1, ColumnC})
    .Join(ColumnD, 
        join2 => join2.ColumnC.Value,
        kobling => ColumnD.Value, 
        (join2, jk1Kobling) => new{  ... })     
现在我需要在第二个联接中添加一个额外的列,我尝试了下面所示的方法。到目前为止,我还没有向联接中添加新列,但我正计划(
/*newcol*/
在代码中)。问题是Linq现在显然无法推断出这些类型。为什么会发生这种情况,除了为了连接而创建特定类型之外,还有什么简单的方法可以避免这个问题吗

错误:

The type arguments for method
'System.Linq.Queryable.Join<TOuter,TInner,TKey,TResult>( ...) cannot
be inferred from the usage. Try specifying the type arguments explicitly.

更新回应下面评论中的链接:问题与此处的两条中间线有关:

.Join(ColumnC, 
     join1 => new { join1.ColumnA.value }, 
     ColumnC => new { ColumnC.value }, 
     (join1, ColumnC) =>  new {join1, ColumnC})
我现在尝试了以下两种方法,结果没有任何变化:

join1 => new { join1.ColumnA.value }, 
         ColumnC => new { value = ColumnC.value }
         join1 => new { value = join1.ColumnA.value }, 
         ColumnC => new { value = ColumnC.value }

我仍然不知道如何指定要比较的内容。任何帮助都将不胜感激

解决了!如果其他人遇到类似问题:

我案例中的问题是,我试图比较的列中的数据类型不同;一个是
Short
,另一个是
int
(也就是说,这些是表示表的C#entity类中使用的类型)。在这种情况下,Linq无法决定在比较时使用哪种类型

解决方案:将
short
值转换为
int

join1 => new { value = (int) join1.ColumnA.value }, 
ColumnC => new { value = ColumnC.value }
添加新列后,解决方案如下所示:

join1 => new {
               value = (int) join1.ColumnA.value, 
               otherValue =  join1.other
             }, 
ColumnC => new { 
                value = ColumnC.value, 
                otherValue = ColumnC.other
               }

?谢谢你的链接,@Dennis,但我不确定它与这种情况有什么关系。查看我的更新-我是否忽略了您链接帖子中的某些内容?如果您发布一段真实代码,而不是伪代码,这会更好。如果
ColumnA
IEnumerable
(或
IQueryable
),那么
ColumnA.value
意味着什么?我觉得我必须简化代码,因为真正的代码有点凌乱和复杂,我想有人可能会基于此认识到问题。也许这太简单了。。在任何情况下,我最终发现了问题(不同的类型,我早就应该意识到)。再次感谢你的输入,你的链接确实给我指明了正确的方向。
join1 => new {
               value = (int) join1.ColumnA.value, 
               otherValue =  join1.other
             }, 
ColumnC => new { 
                value = ColumnC.value, 
                otherValue = ColumnC.other
               }