2010-09-30 52 views
5

我想用LINQ查詢獲取兩個列表的不同。但是這些清單並不屬於同一類型。使用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); 

但是,像這樣我的missingVehicles查詢更多項目比unsoldVehicles

我一直在尋找一種方式來使用Except方法,但我只找到兩個列表都是相同類型的示例。

回答

8

你可以嘗試這樣的事情。

var missingvehicles = from uV in unsoldVehicles 
        where !listDetailUrls.Contains(uV.UrlID) 
        select uV; 
1

如果我理解正確的話,你需要從unsoldVehicles列表中的所有項目進行UrlIDs沒有出現在名單ListDetailUrls

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

的原因,您的當前查詢是不正確的,因爲(vehicle, url)所有組合,其中vehicle.UrlID ! = url將會使過去的過濾器,而你真正想要做的是防止車輛被列入如果任何列表中的網址與其UrlId匹配。 您的查詢不僅會返回應該過濾的車輛,而且每輛車都會重複多次。

我建議:

var urlIds = new HashSet<string>(ListDetailUrls); 
var missingVehicles = unsoldVehicles.Where(vehicle => !urlIds.Contains(vehicle.UrlID)) 
            .ToList();