我有从数据库返回的对象列表,有时甚至有25k到50k的记录。
我现在正用一份订单将它们分组,以便将相应的项目组合起来。
但是,我还需要为每个分组列表获取该列表中对象的最大版本,其中也将有许多重复版本可用。
public class Items
{
public int ID { get; set; }
public string ProductName { get; set; }
public int ProductId { get; set; }
public int Version { get; set; }
}
public class ItemInfo : ReleaseInfo
{
public virtual IGrouping<int,Items> ItemList { get; set; }
}
例如,
var groupedList = (from cn in ItemList
group cn by cn.ProductId into itemGroup
orderby itemGroup.Key ascending
select new ItemInfo
{
cn.ProductId = itemGroup.Key,
ProductName = itemGroup.FirstOrDefault().ProductName,
ItemList= itemGroup
});
这个Itemlist从DB返回,列在下面,
ID, Name, ProductName, ProductId and Version
所以现在我们需要检查相同的ID和ProductId是否有任何重复的项为每个groupedList,如果我们需要使用Version列的最大值,并且只保留在列表中。
示例数据集:第一组列表:
**ROW 1** ID - 1, Product ID - 1 Version 1
**ROW 2** ID - 1, Product ID - 1 Version 2
**ROW 3** ID - 1, Product ID - 1 Version 3
第二组列表:
**ROW 1** ID - 1, Product ID - 2 Version 1
**ROW 2** ID - 2, Product ID - 2 Version 2
从上面的数据,它需要从第一个列表传递ID-1, product ID- 1, Version 3
,从第二个列表传递第二行到接下来的步骤。
如果它是一个单独的实体,我可以通过降序进行排序,并接受第一个元素,但是我需要循环遍历其他实体也可用的项目列表。
发布于 2020-09-07 06:03:19
根据我的理解,我给出了这个答案,如果我错过了任何东西或错过了您的要求,请评论,我会更新答案。
假设您的类如下所示:
public class Items
{
public int ID { get; set; }
public string ProductName { get; set; }
public int ProductId { get; set; }
public int Version { get; set; }
}
public class ItemInfo
{
public virtual IEnumerable<IGrouping<int, Items>> ItemList { get; set; }
}
林克:
List<Items> itemLists = new List<Items>();
var filteredItems = itemLists.Where(x => x.Version == itemLists.Where(y => y.ProductId == x.ProductId).Max(z => z.Version));
var itemsInfo = new ItemInfo { ItemList = filteredItems.GroupBy(x => x.ProductId) };
https://stackoverflow.com/questions/63778878
复制相似问题