c# - 如何访问使用 groupBy 的 LINQ 查询中的元素?

标签 c# sql linq

我有两个 LINQ 查询,我想根据用户选择的月度报告或年度报告在它们之间切换。在他们开始工作之前,他们只是给用户一个结果列表,有时包含 8 个相同的交易,而我想按交易名称对它们进行分组,并显示每个组中的数量。

var sponsorRedemptions = db.PurchasedCardDealRedemptions.Where(pcdr => pcdr.PurchasedCardDeal.PurchasedCard.Card.WhiteLabelId == whiteLabelId)
    .Where(pcdr => pcdr.RedemptionDate.Year == year)
    .Where(pcdr => pcdr.RedemptionDate.Month == month)
    .OrderBy(pcdr => pcdr.PurchasedCardDeal.Deal.Vendor.Name)
    .GroupBy(pcdr => pcdr.PurchasedCardDeal.Deal.Name);


var yearponsorRedemptions = db.PurchasedCardDealRedemptions.Where(pcdr => pcdr.PurchasedCardDeal.PurchasedCard.Card.WhiteLabelId == whiteLabelId)
      .Where(pcdr => pcdr.RedemptionDate.Year == year)
      .OrderBy(pcdr => pcdr.PurchasedCardDeal.Deal.Vendor.Name)
      .GroupBy(pcdr => pcdr.PurchasedCardDeal.Deal.Name);

在我做了这样的选择之后,我在访问该选择中的列时遇到了问题,而这些列在我刚刚执行 .ToList(); 时曾经有效;关于查询。

foreach (var item in sponsorRedemptions)
{
    csv.Append("\n");

    csv.Append(item.PurchasedCardDeal.PurchasedCard.Card.Name + ", " + item.PurchasedCardDeal.Deal.Vendor.Name + ", " + item.PurchasedCardDeal.Deal.Name);

    totalRedemptions++;
}

项目之后的任何内容。不工作 我想知道如何访问组中每个项目的元素以及每个组中项目的数量。任何帮助将不胜感激?

最佳答案

GroupBy 结果中的每个元素都是一个组 - 然后它本身包含元素以及一个键。所以你可以这样做:

foreach (var group in sponsorRedemptions)
{
    Console.WriteLine("Group: {0}", group.Key);
    foreach (var item in group)
    {
        Console.WriteLine("  {0}", item.PurchasedCardDeal.Deal.Vendor.Name);
    }
}

顺便说一句,您似乎只在 Where 子句之后使用了 PurchasedCardDeal.Deal 部分,因此您可能希望转换到该部分:

var sponsorRedemptions = db.PurchasedCardDealRedemptions
    .Where(pcdr => pcdr.PurchasedCardDeal.PurchasedCard.Card.WhiteLabelId == whiteLabelId)
    .Where(pcdr => pcdr.RedemptionDate.Year == year)
    .Where(pcdr => pcdr.RedemptionDate.Month == month)
    .Select(pcdr => pcdr.PurchasedCardDeal.Deal);
    .OrderBy(deal => deal.Vendor.Name)
    .GroupBy(deal => deal.Name);

foreach (var group in sponsorRedemptions)
{
    Console.WriteLine("Group: {0}", group.Key);
    foreach (var deal in group)
    {
        Console.WriteLine("  {0}", deal.Vendor.Name);
    }
}

关于c# - 如何访问使用 groupBy 的 LINQ 查询中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31147620/

相关文章:

c# - 多个where linq

c# - 当在 Burp Suite 或任何类似工具中拦截表单提交时,是否有办法隐藏已发布的表单数据

mysql - 如何检索添加到数据库表中的行?

python sqlite3,我必须多久提交一次?

c# - 在基本构造函数中使用 lambda 表达式的极端情况

c# - Asp.net 自动阻止任何类似于 html 代码的输入

c# - RadioButtonList.SelectedIndex 与 RadioButtonList.SelectedValue

mysql - 何时在 SQL 查询中使用标识符

c# - LINQ 查询从 SQL 转换而来,它使用包含 GROUP BY 和 COUNT 的子查询

c# - Entity Framework - 带有基于 NULLABLE 参数的 WHERE 子句的 LINQ 语句