2

我有一个看起来像这样的查询,它应该可以工作:

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{  ... })     

现在我需要在第二个连接中添加一个额外的列,我尝试了如下所示的内容。到目前为止,我实际上还没有在联接中添加一个新列,但我打算(/* new col */在代码中)。问题是 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.

我试图运行的代码:

ColumnA
    .Join(ColumnB, 
        ColumnA => ColumnA.value, 
        ColumnB => ColumnB.value, 
        (ColumnA, ColumnB) =>  new {ColumnA, ColumnB})
    .Join(ColumnC, 
        join1 => new {join1.ColumnA.value,  /* new col */ }, 
        ColumnC => new {ColumnC.value, /* new col*/ }, 
        (join1, ColumnC) =>  new {join1, ColumnC})
    .Join(ColumnD, 
        join2 => join2.ColumnC.Value,
        kobling => ColumnD.Value, 
        (join2, jk1Kobling) => new{  ... })     

针对下面评论中的链接进行更新:问题与此处的两条中间线有关:

.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 }

我仍然无法弄清楚如何指定要比较的内容。任何帮助将不胜感激。

4

1 回答 1

3

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

我的问题是我试图比较的列中的数据类型不同。一个是 type Short,而另一个是int(也就是说,这些是用于表示表的 C# 实体类中的类型)。在这种情况下,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
               }
于 2013-10-04T12:18:47.793 回答