如何访问使用groupBy的LINQ查询中的元素

本文关键字:groupBy LINQ 查询 元素 何访问 访问 | 更新日期: 2023-09-27 18:00:42

我有两个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的LINQ查询中的元素

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);
    }
}

item是组中元素的集合。

要查看分组依据,请使用item.Key。要查看单个项目,请使用访问集合的常规方式,例如循环或LINQ方法(例如Count())。