C# 如何访问使用groupBy的LINQ查询中的元素?
我有两个LINQ查询,我想根据用户选择的月报或年报在它们之间切换。在他们开始工作之前,但他们只是给用户一个结果列表,有时是8个相同的交易,相反,我想按交易名称对它们进行分组,并显示每个组中的数量C# 如何访问使用groupBy的LINQ查询中的元素?,c#,sql,linq,C#,Sql,Linq,我有两个LINQ查询,我想根据用户选择的月报或年报在它们之间切换。在他们开始工作之前,但他们只是给用户一个结果列表,有时是8个相同的交易,相反,我想按交易名称对它们进行分组,并显示每个组中的数量 var sponsorRedemptions = db.PurchasedCardDealRedemptions.Where(pcdr => pcdr.PurchasedCardDeal.PurchasedCard.Card.WhiteLabelId == whiteLabelId) .W
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++;
}
项目之后的任何内容。不工作我想知道如何访问组中每个项目的元素以及每个组中有多少项目。如有任何帮助,将不胜感激。
项是组中元素的集合
要查看分组依据的内容,请使用item.Key
。要查看单个项,请使用访问集合的常规方法,例如循环或LINQ方法(例如,Count()
)。项是组中元素的集合
要查看分组依据的内容,请使用item.Key
。要查看单个项目,请使用访问集合的常规方法,例如循环或LINQ方法(例如,Count()
)。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);
}
}
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);
}
}