我们正在研究一些LINQ的东西,并且是使用GroupBy扩展的新手。
我正在编辑此帖子以包含我的实际代码,因为我尝试使用一些简单的示例,但它似乎让那些试图帮助的人更加困惑。对不起。
注意我们需要将下面的Amount字段相加。我们还没有尝试,因为我们只想弄清楚如何从groupBy中提取列表。
这是我的代码:
myCSTotal2.AddRange(userTotals.Where(w => w.priceinfoId == priceinfoID).GroupBy(g => g.termLength, o => new Model.MyCSTotal2
{
PriceinfoID = o.priceinfoId,
BillcodeID = o.billcodeid,
JobTypeID = o.jobtypeID,
SaleTypeID = o.saletypeID,
RegratesID = o.regratesID,
NatAccPerc = o.natAcctPerc,
NatIgnInCommCalc = o.natIgnInCommCalc,
TermLength = (int)o.termLength,
Amount = o.RMR1YrTotal / 12,
RuleEvaluation = 0
}).Select(grp => grp.ToList()));
尝试执行此操作时出现的错误是:
编辑:谢谢你的帮助。以下是我们最终的结果:参数1:无法转换
IEnumerable<List<MyCSTotal2>>
至IEnumerable<MyCSTotal2>
myCSTotal2.AddRange(userTotals.Where(w => w.priceinfoId == priceinfoID)
.GroupBy(g => g.termLength)
.SelectMany(cl => cl.Select( o => new Model.MyCSTotal2
{
PriceinfoID = o.priceinfoId,
BillcodeID = o.billcodeid,
JobTypeID = o.jobtypeID,
SaleTypeID = o.saletypeID,
RegratesID = o.regratesID,
NatAccPerc = o.natAcctPerc,
NatIgnInCommCalc = o.natIgnInCommCalc,
TermLength = (int)o.termLength,
Amount = cl.Sum(m=>m.RMR1YrTotal / 12),
RuleEvaluation = 0
})));
答案 0 :(得分:1)
我认为没有理由使用GroupBy,因为没有涉及聚合函数。如果你想通过termLength让人不同。写一个DistinctBy。您将以这种方式获得所需的集合
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
然后使用像这样的扩展名
var collection = userTotals
.Where(w => w.priceinfoId == priceinfoID)
.DistinctBy(g => g.termLength)
.Select(o => new Model.MyCSTotal2
{
PriceinfoID = o.priceinfoId,
BillcodeID = o.billcodeid,
JobTypeID = o.jobtypeID,
SaleTypeID = o.saletypeID,
RegratesID = o.regratesID,
NatAccPerc = o.natAcctPerc,
NatIgnInCommCalc = o.natIgnInCommCalc,
TermLength = (int)o.termLength,
Amount = o.RMR1YrTotal / 12,
RuleEvaluation = 0
});
答案 1 :(得分:1)
为了展平群组,您需要使用SELECT
COUNT(*),
Sub_Type,
Main_Type
FROM yourTable
GROUP BY
Sub_Type,
Main_Type
ORDER BY
Main_Type,
Sub_Type
扩展方法:
SelectMany
但如果这是您当前的查询,则无需分组,则需要使用SelectMany(grp => grp.ToList())
投影您的收藏集:
Select