【发布时间】:2021-08-18 07:34:44
【问题描述】:
我正在尝试做一个简单的查询。我想要一个带有字符串和 Guid 的列表以及带有小数点和字符串的子列表。我以这种方式进行查询,但是在转换为实体框架时它一直出错我做错了什么?
提前致谢
var a = ( from c in DbContext.CC
join icc in DbContext.ICC c.Id equals icc.CCId
join i in DbContext.I on icc.IId equals i.Id
join p in DbContext.P on i.PId equals p.Id
select new
{
GuidId = p.Id,
StringN = p.StringN,
CCString = c.CCString ,
DecimalValue = icc.DecimalValue
}).GroupBy(x => new { x.GuidId , x.StringN }).
Select(x => new Model
{
GuidId = x.Key.GuidId ,
StringN = x.Key.StringN ,
Values= x.Select(y => new OtherModel
{
DecimalValue = y.DecimalValue ,
CCString = y.CCString
})
}
).OrderBy(x => x.StringN );
错误:
LINQ 表达式 '(GroupByShaperExpression:
键选择器:新 {
GuidId = (p.Id),
StringN = (p.Name)
},
元素选择器:新 {
GuidId = (ProjectionBindingExpression: GuidId),
StringN = (ProjectionBindingExpression: StringN),
CCString = (ProjectionBindingExpression: CCString),
DecimalValue = (ProjectionBindingExpression: DecimalValue)
}
)
.Select(y => new OtherModel{
DecimalValue = y.DecimalValue ,
CCString = y.CCString
}
)' 无法翻译。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
【问题讨论】:
-
x.Key没有CCString成员(因此第二次选择失败)。Model没有StringN成员,因此OrderBy失败。你说它在翻译成 EF 时会失败,但它根本不应该编译。你也没有说错误是什么 -
抱歉,快速复制.. 我已经编辑了我的代码,它应该是
StringN而不是CCString。另外,用错误更新了帖子。谢谢 -
您的问题仍然存在语法错误。请确认您的minimal reproducible example 是正确的
-
我遇到的错误是在第三个选择中,我需要执行以获取值。我可以用其他方式吗?
-
正如@RodrigoRodrigues 已经说过的,请提供此查询中涉及的实体类以及每个表中的两个或三个值以及查询的期望结果。在这种情况下,我们可以在本地机器上测试和调试您的问题。在访问智能感知、调试器和源数据时,您无法发现错误。因此,不要指望任何人在不了解底层数据结构且无法测试或调试它的情况下仅通过查看您的查询就能发现错误。
标签: list linq group-by entity-framework-core