c# - 使用 LINQ 合并 2 个列表并对多个属性求和

标签 c# .net linq

我有一个包含以下属性的类:

public class SomeClass()
{
public Int32 ObjectId1 {get;set;}
public Int32 ObjectId2 {get;set;}
public Int32 ActiveThickeness {get;set;}
public Int32 ActiveFilterThickness {get;set;}
}

我还有 2 个列表:

List<SomeClass> A
List<SomeClass> B

列表A有数据:

| ObjectId1 | ObjectId2 | ActiveThickness | ActiveFilterThickness |
-------------------------------------------------------------------
|     1     |     3     |       50        |           0           |
 ------------------------------------------------------------------
|     1     |     2     |       400       |           0           |
-------------------------------------------------------------------
|     4     |    603    |       27        |           0           |
-------------------------------------------------------------------

列表B有数据:

| ObjectId1 | ObjectId2 | ActiveThickness | ActiveFilterThickness |
-------------------------------------------------------------------
|     1     |     3     |       0         |         13671         |
 ------------------------------------------------------------------
|     1     |     2     |       0         |          572          |
-------------------------------------------------------------------
|    29     |    11     |       0         |         4283          |
-------------------------------------------------------------------

我想将 A 和 B(如果可能的话使用 LINQ)合并到 SomeCalss 的列表 C 中,其中包含如下数据:

| ObjectId1 | ObjectId2 | ActiveThickness | ActiveFilterThickness |
-------------------------------------------------------------------
|     1     |     3     |       50        |         13671         |
 ------------------------------------------------------------------
|     1     |     2     |       400       |          572          |
-------------------------------------------------------------------
|    29     |    11     |       0         |         4283          |
-------------------------------------------------------------------
|     4     |    603    |       27        |           0           |
-------------------------------------------------------------------

我怎样才能做到这一点?

最佳答案

使用GroupBy 对普通对象进行分组,使用Sum 对所需属性求和

        var ab = A.Concat(B).GroupBy(x => new
                                              {
                                                      x.ObjectId1,
                                                      x.ObjectId2
                                              });


        var result = ab.Select(x => new SomeClass
                                        {
                                                ObjectId1 = x.Key.ObjectId1,
                                                ObjectId2 = x.Key.ObjectId2,
                                                ActiveFilterThickness = x.Sum(i => i.ActiveFilterThickness),
                                                ActiveThickeness = x.Sum(i => i.ActiveThickeness)
                                        });

关于c# - 使用 LINQ 合并 2 个列表并对多个属性求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901234/

相关文章:

.net - 执行 [adsisearcher] 并将其存储在哈希表或字典集合列表中的最快方法

c# - 为什么 Linq 更快

c# - 从 DbSet<TEntity> 中获取属性值在 IEnumerable 中的所有实体

c# - Visual Studio 中一个项目的两个站点

c# - 从连接到参数的 SQl

c# - 使用 NavigateUrl 和 Eval() 的超链接。错误在哪里?

c# - 如何在不影响 "last write time"的情况下更改文件

.net - 实现 View 模型以反射(reflect)基本模型?

c# - 我可以对事件目录使用基于 token 的身份验证吗?

android - Xamarin.Forms PCL 和 ServiceStack 4.5