【问题标题】:Merge two dynamic lists and override values合并两个动态列表并覆盖值
【发布时间】:2015-05-08 11:49:49
【问题描述】:

我有两个动态列表,每个列表项都包含三个属性:“Id”(整数)、“LikesRed”(布尔)和“LikesBlue”(布尔)。

我想合并两个列表,将每个项目按其“Id”分组,但我还想用任何“真”值覆盖任何“假”值。

例如,这是我的两个列表的数据:

List1

{ Id = 1, LikesRed = True, LikesBlue = False }
{ Id = 2, LikesRed = True, LikesBlue = False }
{ Id = 4, LikesRed = False, LikesBlue = True }

List2

{ Id = 1, LikesRed = False, LikesBlue = True }
{ Id = 3, LikesRed = False, LikesBlue = True }
{ Id = 4, LikesRed = True, LikesBlue = False }

这是我的预期结果:

{ Id = 1, LikesRed = True, LikesBlue = True }
{ Id = 2, LikesRed = True, LikesBlue = False }
{ Id = 3, LikesRed = False, LikesBlue = True }
{ Id = 4, LikesRed = True, LikesBlue = True }

我已设法使用以下方法合并两个列表(但项目未分组):

var results = list1.Concat(list2);

我还尝试使用 LINQ 对该列表中的项目进行分组(它有效,但我不确定我可以/应该用它做什么):

var final = from x in results
            group x by x.Id into g
            select g;

任何人都可以就我如何实现目标提供任何建议吗?

【问题讨论】:

标签: c# asp.net linq


【解决方案1】:

只需检查组中是否有任何项目的值设置为 true:

from x in list1.Concat(list2)
group x by x.Id into g
select new {
   Id = g.Key,
   LikesRed = g.Any(x => x.LikesRed),
   LikesBlue = g.Any(x => x.LikesBlue)
}

【讨论】:

  • 完美、简单的解决方案!
【解决方案2】:

您可以像以前一样首先按 id 对列表进行分组,然后使用 Zip 用您的偏好覆盖这些值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多