c# - 是否可以将单个 linq 查询结果分配给多个变量?

标签 c# linq entity-framework entity-framework-6

我可以在 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/

相关文章:

c# - DbContext 与 Ninject ADO.NET

c# - 为什么从投影创建的整数变量不能递增?

c# - 在 C# 中使用 LINQ 比较字典

c# - 来自不同上下文的实体是否相互兼容?

c# - google maps onclick事件导致asp.net页面的部分回发c#

c# - 转换后不需要的按钮调整大小

C# Linq 或 Lambda 表达式 Group by Week IEnumerable list with date field

c# - Entity Framework 6 : Master-Detail view shows single HashSet instead of filtered detail items

entity-framework - 首先编码实体配置

C# WPF 绑定(bind)到数据库