我正在尝试使用LINQ查询获取两个不同的列表。但列表的类型不同。
List<Vehicle> unsoldVehicles
List<string> ListDetailUrls
每个Vehicle Object都有一个名为 UrlID (字符串)的字段,而 ListDetailUrls 列表只包含字符串。 我需要车辆列表中的每辆车,其中 UrlID 字段与条目 ListDetailUrls 不匹配。
到目前为止,我所做的是:
List<Vehicle> missingVehicles = new List<Vehicle>(
from uV in unsoldVehicles
from de in ListDetailUrls
where uV.UrlID != de
select uV);
但是通过这样的查询我的 missingVehicles 比 unsoldVehicles 更多的项目!
我正在寻找一种方法以某种方式使用Except方法,但我只找到两个列表属于同一类型的样本。
答案 0 :(得分:8)
你可以尝试这样的事情。
var missingvehicles = from uV in unsoldVehicles
where !listDetailUrls.Contains(uV.UrlID )
select uV;
答案 1 :(得分:2)
您当前查询不正确的原因是因为(vehicle, url)
的{strong>所有组合,其中vehicle.UrlID ! = url
将使其超过过滤器。而您真正想要做的是如果列表中的任何网址与其UrlId
匹配,则会阻止包含此广告。
您的查询不仅会返回应该过滤掉的车辆,而且每辆车都会重复多次。
我建议:
var urlIds = new HashSet<string>(ListDetailUrls);
var missingVehicles = unsoldVehicles.Where(vehicle => !urlIds.Contains(vehicle.UrlID))
.ToList();
答案 2 :(得分:1)
如果我理解正确,您需要unsoldVehicles
列表UrlIDs
中ListDetailUrls
列表中未显示的所有项目:
var missingVehicles = unsoldVehicles.Where(uv => !ListDetailUrls.Contains(uv.UrlID)).ToList();