【发布时间】:2013-10-04 10:00:34
【问题描述】:
我有一个看起来像这样的查询,它可以正常工作:
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 }
我仍然不知道如何指定要比较的内容。任何帮助将不胜感激。
【问题讨论】:
-
感谢@Dennis 提供的链接,但我不确定它与这种情况的确切关系。查看我的更新 - 我是否忽略了您链接帖子中的某些内容?
-
最好贴一段真实代码,而不是伪代码。如果
ColumnA是IEnumerable<T>(或IQueryable<T>),那么ColumnA.value是什么意思? -
我觉得我必须简化代码,因为真正的代码有点凌乱和复杂,我想有人可能会基于此识别出问题所在。也许这太简单了。无论如何,我最终发现了问题(不同的类型,我早该意识到的)。再次感谢您的意见,实际上您的链接确实为我指明了正确的方向。