首先,如果这是一个明显的重复道歉,我搜索了所有可能产生结果的短语,但很难找到答案/连贯地构建我的搜索词。
我有一个集合1和一个对象A的集合2。
// Object A Structure
Date
Type
Value
集合1涵盖2种类型的日期1到2,集合2涵盖1种类型的日期3到4:
// Collection 1
[0] = 1st, TypeA, 3
[1] = 2nd, TypeA, 3
[2] = 1st, TypeB, 57
[3] = 2nd, TypeB, 57
// Collection 2
[0] = 3rd, TypeB, 57
[1] = 4th, TypeB, 58
我最初的要求是将这两个集合结合起来。不是问题:
var result = collection1.Union(collection2);
但是,我现在希望将两个集合组合在一起,但排除集合1中集合2中不存在Type的对象:
// Result Collection
[0] = 1st, TypeB, 57
[1] = 2nd, TypeB, 57
[2] = 3rd, TypeB, 57
[3] = 4th, TypeB, 58
我确信这是一个简单的(希望是linq)单线解决方案,但我无法让我的大脑知道它是什么。
我到目前为止最好的(两条线)是:
// Get distinct Types from Collection 2
var typesToInclude = collection2.GroupBy(c => c.Type).Select(group => group.First().Type);
var result = collection2.Union(collection1.Where(c => typesToInclude.Contains(c.Type)));
但这感觉非常笨重而不是最佳:(
答案 0 :(得分:7)
尝试以下
var result = collection1
.Where(x => collection2.Any(c => c.Type == x.Type))
.Union(collection2);
基本上首先过滤collection1
向下到Type
中collection2
值的项目,然后运行联合操作