gpt4 book ai didi

c# - 多个 linq 使用 lambda 语法与匿名类型连接

转载 作者:行者123 更新时间:2023-11-30 22:13:25 25 4
gpt4 key购买 nike

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

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 }

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

最佳答案

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

我遇到的问题是我尝试比较的列中的数据类型不同;一个是 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
}

关于c# - 多个 linq 使用 lambda 语法与匿名类型连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19178456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com