LINQ

2010-09-30 15 views
5

kullanarak farklı türlerde iki Listenin farkı İki listeden farklı olarak bir LINQ sorgusu almayı deniyorum. Ama listeler aynı tipte değil. ListDetailUrls listesi sadece dizeleri oluşur ikenLINQ

List<Vehicle> unsoldVehicles 
List<string> ListDetailUrls 

Her Araç Nesne UrlID (string) olarak adlandırılan bir alan vardır. Araç Listesinden, UrlID alanın ListDetailUrls girişiyle eşleşmediği her Aracı'na ihtiyacım var. Şimdiye kadar is ne yaptın

:

List<Vehicle> missingVehicles = new List<Vehicle>(
    from uV in unsoldVehicles 
    from de in ListDetailUrls 
    where uV.UrlID != de 
    select uV); 

Ama bu benim missingVehicles gibi bir sorgu ile

unsoldVehicles fazla öğe vardır!

Bir şekilde Except yöntemini kullanmanın bir yolunu arıyordum, ancak her iki listenin de aynı türde olduğu örnekleri buluyorum.

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

cevap

8

Böyle bir şey deneyebilirsiniz: Eğer doğru anlamak

1

, sen ListDetailUrls listesinde görünmüyor UrlIDs ile unsoldVehicles listeden tüm öğeleri gerekir.

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

vehicle.UrlID ! = url filtrenin geçmiş yapacaktır. Eğer gerçekten ne yapmak istediğinizi oysa (vehicle, url) ait tüm kombinasyonları varsa dahil edilmesini bir araç önlemektir çünkü mevcut sorgu yanlıştır nedenidir Listede url, onun UrlId eşleşiyor. Sorgunuz filtrelenmesi gereken araçları döndürmekle kalmaz, aynı zamanda her araç birden çok kez tekrarlanacaktır.

Önerim:

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