我可以在 TSQL 中做到这一点
SELECT
@TotalDays = COUNT(Days),
@TotalHours = SUM(Hours)
FROM
Schedule
WHERE
GroupID = 1
如何在 linq in single query 中实现这一点,我当前的代码;
var totalDays = 0;
var totalHours = 0;
totalDays = _schedule.Count(c => c.GroupID == 1);
totalHours = _schedule.Where(w => w.GroupID == 1).Sum(s => s.Hours);
这不是有效的,因为它在数据库中调用了 2 个单独的查询
最佳答案
你可以尝试这样的事情:
var result = _schedule.Where(s => s.GroupID == 1)
.GroupBy(x => x.GroupID)
.Select(gr => new
{
TotalDays = gr.Count(),
TotalHours = gr.Sum(s=>s.Hours);
});
最初,您根据 GroupID
过滤数据。您选择 GroupID
等于 1 的那些。然后您根据 ID 对它们进行 GroupBy
。这个 mihgt 接缝有点傻,但这样你就可以创建一组数据。因此,您只需计算组中的项目并计算您想要的总和。最后但同样重要的是,在创建 GroupBy
之后,您选择一个具有两个属性的匿名类型,一个用于 TotalDays
,一个用于 TotalHours
。
然后你可以使用上面的结果如下:
var totalDays = 0;
var totalHours = 0;
var first = result.FirstOrDefault();
if(first!=null)
{
totalDays = first.TotalDays,
totalHours = first.TotalHours
};
关于c# - 是否可以将单个 linq 查询结果分配给多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32240501/