我有一个BillArticle对象列表,这个类看起来像这样:
public class BillArticle
{
public int ArticleID { get; set; }
public string ArticleName { get; set; }
public double ArticleQuantity { get; set; }
public double ArticlePrice { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以我有List contaning让我说10个对象,我想通过重复ArticleID和ArticlePrice合并这些对象.
所以我的问题是这样的:我想要查看列表,如果有2个或更多具有相同ArticleID和相同价格的对象将它们合并(以汇总ArticleQuantity).我一直在冲我的头一段时间,如果有人能帮我一把,那将是非常棒的.感谢你提前的帮助,抱歉我的英语不好.
LINQ非常适合这种工作:)听起来你可能想要这样的东西:
var merged = list.GroupBy(x => x.ArticleID)
.Select(g => new BillArticle {
ArticleID = g.Key,
ArticleName = g.First().ArticleName,
ArticleQuantity = g.Sum(x => x.ArticleQuantity),
ArticlePrice = g.First().ArticlePrice
});
Run Code Online (Sandbox Code Playgroud)
假设您确信所有文章的价格和名称都是相同的.如果没有,您应该考虑如何处理这种情况.
如果你需要merged成为a List<BillArticle>,只需.ToList()在最后添加.
编辑:正如Andy的回答所述,您可以使用匿名类型按文章ID和文章价格进行分组.你仍然需要考虑文章名称.如果文章ID确实是一个标识符,我希望名称和价格无论如何都要相同,但这取决于您的业务规则.