【发布时间】:2021-08-19 11:52:21
【问题描述】:
我有两组列表,我希望得到这两个列表之间的区别,但根据我的逻辑,我似乎没有得到预期的结果:
列表 A
A002
A75
B908
123456
672314
756213
列表 B
htg1
EDDIE1
EDD1E2
A002
A75
B908
预期结果
获取列表 B 中尚未在映射列表(列表 A)中维护的所有新代码
这应该给我以下所有新项目:
htg1
EDDIE1
EDDIE2
实际输出
当我应用 LINQ 逻辑进行过滤时,我得到了列表 B 中的所有项目:
htg1
EDDIE1
EDDIE2
A002
A75
B908
这是因为此连接查询返回 0 行:
List<string> joinItems = new List<string>();
joinItems = (from d1 in mappings
join d2 in references on d1.MappingId equals d2.CustCode
select d1.MappingId).ToList<string>();
其中映射表示 LIST A 的结果集:
List<Partner> mappings = GetMappingsAsModel();
references 代表 LIST B 的结果集:
List<CustomerCode> references = GetCustomerCodes();
为了找出我正在做的不同之处:
List<string> cuscodes = references.Select(x => x.CustCode.ToString()).ToList();
var newItems = cuscodes.Except(joinItems);
int newCodes = cuscodes.Except(joinItems).Count();
我上面的加入查询有什么问题?
【问题讨论】:
-
当您说差异时,您是否只想要两个列表中不在另一个列表中的所有项目?如果是这样,它基本上与交叉点相反 - 这里有一个答案:stackoverflow.com/questions/5620266/the-opposite-of-intersect(注意,这是已接受答案的第二个示例)