使用LINQ计算两个不同类型列表的差异

5

我正在尝试使用LINQ查询获取两个列表的不同之处。但是这些列表的类型不同。

List<Vehicle> unsoldVehicles
List<string> ListDetailUrls

每个车辆对象都有一个名为UrlID(字符串)的字段,而ListDetailUrls列表仅包含字符串。 我需要从车辆列表中获取每个车辆,其中字段UrlID与条目ListDetailUrls不匹配。
到目前为止我所做的是:
List<Vehicle> missingVehicles = new List<Vehicle>(
    from uV in unsoldVehicles
    from de in ListDetailUrls
    where uV.UrlID != de
    select uV);

但是使用这样的查询,我的缺失车辆未售车辆多!

我正在寻找一种方法来使用Except方法,但我只能找到两个列表类型相同的示例。

3个回答

8
您可以尝试像这样做。
var missingvehicles = from uV in unsoldVehicles
                    where !listDetailUrls.Contains(uV.UrlID )
                    select uV;

2
你当前查询不正确的原因是因为 所有 的 (车辆, URL) 组合都会通过过滤器,其中 vehicle.UrlID != url ,而你真正想要做的是,如果列表中的 任何 URL 与其 UrlId 匹配,则防止包含车辆。 不仅你的查询会返回应该被过滤掉的车辆,而且每个车辆会重复多次。
我建议:
var urlIds = new HashSet<string>(ListDetailUrls);
var missingVehicles = unsoldVehicles.Where(vehicle => !urlIds.Contains(vehicle.UrlID))
                                    .ToList();

1

如果我理解正确,您需要从unsoldVehicles列表中获取所有具有未出售的UrlIDs且不在ListDetailUrls列表中出现的项目:

var missingVehicles = unsoldVehicles.Where(uv => !ListDetailUrls.Contains(uv.UrlID)).ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接