【发布时间】:2020-12-29 00:28:07
【问题描述】:
public List<Tuple<int, int>> GetTupleDetailedLog()
{
var query = (from c in _context.Lk_business_rules
join v in _context.Business_rules_detailed_log on c.User_story_number equals v.User_story_number
where c.Status_id_fk == 3
group new { c, v } by new { c.Rule_description, c.User_story_number } into cv
select new
{
us = cv.Select(cv => cv.v.User_story_number), //this should be the first int on tuple
count = cv.Select(cv => cv.v.Row_id.Count()), //this should be the second int on tuple
});
var TupleList = new List<Tuple<int, int>>();
foreach (var item in query)
{
TupleList.Add(new Tuple<int, int>(Convert.ToInt32(item.us), Convert.ToInt32(item.count)));
}
return TupleList;
}
我在这里有一个新问题,我有一个元组列表,我想用查询选择的输出填充它。这段代码帮助了我,但现在我遇到了运行时错误:
InvalidOperationException: LINQ 表达式 '(GroupByShaperExpression: KeySelector: new { Rule_description = (l.Rule_description), User_story_number = (l.User_story_number) }, ElementSelector:new { c = (EntityShaperExpression: EntityType: Lk_business_rules ValueBufferExpression: (ProjectionBindingExpression: c) IsNullable: False), v = (EntityShaperExpression: EntityType: Business_rules_detailed_log ValueBufferExpression: (ProjectionBindingExpression: v) IsNullable: False) } ) .Select(cv => cv.v.User_story_number)' 无法翻译。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
还有:
处理请求时发生未处理的异常。 InvalidOperationException: LINQ 表达式'(GroupByShaperExpression:
要么以可翻译的形式重写查询,要么通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关更多信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。 Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
涉及的数据:
问题在于获取一个具有两个值的元组,以添加到未与数据库映射的实体。
所以,一方面我们有业务规则,其中包含它们的状态(我们必须按状态 3 过滤)并包含一个 Rows_id,我们必须将它与Detailed_log 中的相同字段交叉,并在按相同字段分组后,计算每个 Row_id 有多少行,在 detail_log 中(什么会给我们我们必须放在元组的第二个字段中的错误)
这就是为什么我需要 join 和 group by,以及 where 中的 state 过滤器。
【问题讨论】:
-
请公布正在编译的查询代码。
-
cv.Select(cv- 无法编译! -
Row_id.Count()- 什么是Row_id?是不是有顺序?还是标量? -
.Select(...), //this should be ... int on tuple- 选择返回序列。它不能是单个数字。 -
Row_id 是数据库中的 VARCHAR(MA) 我刚刚发现:( 即使它充满了数字,我也无法从数据库中更改类型,我可以从查询中应用一些转换吗?我不要相信