如何在 LINQ C# 中仅过滤 2 列分组中的最后一个值
Posted
技术标签:
【中文标题】如何在 LINQ C# 中仅过滤 2 列分组中的最后一个值【英文标题】:How to filter only last value in 2 columns grouping in LINQ C# 【发布时间】:2022-01-11 06:23:26 【问题描述】:假设我有以下数据:
EntryID | ColValueText
1113 20
1113 19
1024 20
1113 20
1024 21
1113 23
所以在 C# 中使用 LINQ 或任何我想像这样过滤数据的方法
EntryID | ColValueText
1113 23
1024 21
即:按两列分组,但仅针对每个 entryid 获取 colvaluetext 的最后一个值。 我正在附加我的代码,但我无法根据 entryid 获取最后一个 colvaluetext。
var groupSalesPersonData = (from r in sp
group r by new r.EntryID, r.ColValueText
into results
select new GroupByCommonDto
ParentGroupById = results.Select(a => a.EntryID).LastOrDefault(),
FieldValue = results.Select(a => a.FieldValue).LastOrDefault(),
Order = results.Sum(x => x.Order),
VehicleProfit = results.Sum(x => x.VehicleProfit),
ColValueText = results.Select(a => a.ColValueText).LastOrDefault()
)
.ToList();
【问题讨论】:
您不应按ColValueText
分组,而应仅按EntryID
分组。无论如何,如果您解释为什么需要与ColValueText
分组会更好。以便评估是否需要。谢谢。
【参考方案1】:
我不会使用 Linq 来解决这个问题。您可以使用 Aggregate 执行此操作,因为这是一个聚合问题。我会使用一个简单的 foreach 和一个字典
【讨论】:
【参考方案2】:var groupSalesPersonData = (from r in sp
group r by new r.EntryID
into results
select new GroupByCommonDto
ParentGroupById = results.Select(a => a.EntryID).LastOrDefault(),
ColValueText = results.Select(a => a.ColValueText).LastOrDefault() //Assuming this is a text value and you always want last in the collection.
)
.ToList();
ColValueText 如果这是使用正确类型和正确排序顺序的数字,则始终为您提供正确的值
【讨论】:
以上是关于如何在 LINQ C# 中仅过滤 2 列分组中的最后一个值的主要内容,如果未能解决你的问题,请参考以下文章