LINQ

2010-09-30 14 views
5

का उपयोग कर विभिन्न प्रकार के साथ दो सूचीओं का अंतर मैं LINQ क्वेरी के साथ दो सूचियों को अलग करने की कोशिश कर रहा हूं। लेकिन सूचियां एक ही प्रकार के नहीं हैं। जबकि ListDetailUrls सूची में केवल तार के होते हैंLINQ

List<Vehicle> unsoldVehicles 
List<string> ListDetailUrls 

प्रत्येक वाहन वस्तु एक क्षेत्र UrlID (स्ट्रिंग) कहा जाता है। मुझे वाहन सूची से प्रत्येक वाहन की आवश्यकता है जहां क्षेत्र UrlID प्रविष्टि ListDetailUrls से मेल नहीं खाता है।

मैं अब तक क्या किया है:

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

लेकिन यह मेरी missingVehicles की तरह एक प्रश्न के साथ unsoldVehicles की तुलना में अधिक आइटम हैं!

मैं किसी भी तरह से एक्सेप्ट-विधि का उपयोग करने का एक तरीका ढूंढ रहा था, लेकिन मुझे केवल नमूने मिलते हैं जहां दोनों सूचियां एक ही प्रकार के हैं।

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

उत्तर

8

आप कुछ इस तरह की कोशिश कर सकते:

1

अगर मैं सही ढंग से समझ, आप UrlIDs साथ unsoldVehicles सूची के सभी आइटम है कि ListDetailUrls सूची में दिखाई नहीं देते की जरूरत है।

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

कारण अपने वर्तमान क्वेरी सही नहीं है, क्योंकि सभी जहां vehicle.UrlID ! = url फिल्टर अतीत यह कर देगा।, जबकि आप वास्तव में क्या करना चाहते हैं क्या (vehicle, url) के संयोजन अगर किसी भी शामिल नहीं की जाएगी एक वाहन को रोकने के लिए है सूची में यूआरएल अपने UrlId से मेल खाता है। न केवल आपकी क्वेरी उन वाहनों को वापस कर देगी जिन्हें फ़िल्टर किया जाना चाहिए, लेकिन प्रत्येक वाहन को कई बार दोहराया जाएगा।

मेरा सुझाव है:

var urlIds = new HashSet<string>(ListDetailUrls); 
var missingVehicles = unsoldVehicles.Where(vehicle => !urlIds.Contains(vehicle.UrlID)) 
            .ToList(); 
संबंधित मुद्दे