我正在尝试获取 dataA 中位于 dataB 中且具有不同属性 c 值的项目子集。属性 a 和 b 可以用作索引,因此我尝试仅过滤掉有用的对,然后检查它们是否具有不同的 c 值。
这是我想出的 linq 表达式,它确实有效,但似乎必须有更好/更快的方法来找到这个子集。
var itemsInBoth = from item in dataA
from item2 in dataB
where item.a == item2.a && item.b == item2.b
select new
{
first= item,
second = item2
};
var haveDifferentC = from item in itemsInBoth
where item.first.c != item.second.c
select item.first;
最佳答案
根据 David B 提供的答案,我最终选择了他的方法的稍微修改版本。虽然差异很小,但我想我应该分享这个,主要是为了向那些喜欢表达语法的人(像我一样)展示一个版本。
此外,我决定使用匿名键/值对来简化结构,而不是分组。
var dictA = (from item in dataA
select new
{
key = CreateIndexValue(item.a, item.b),
value = item
}).ToDictionary(kv => kv.key, kv => kv.value);
var dictB = (from item in dataB
select new
{
key = CreateIndexValue(item.a, item.b),
value = item
}).ToDictionary(kv => kv.key, kv => kv.value);
var filesInBoth = from item in dictA
where dictB.ContainsKey(item.Key)
select new
{
itemA = dictA[item.Key],
itemB = dictB[item.Key]
};
var differentSize = from item in filesInBoth
where item.itemA.c!= item.itemB.c
select item.itemA;
关于c# - 如何在两组数据中找到部分不同的项目子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/606591/