2011-02-26 14 views
5

मैंने कुछ समय पहले इस प्रश्न को पोस्ट किया है लेकिन मेरे मुद्दे का आंशिक जवाब मिला है, इसलिए मैंने सोचा कि मैं अधिक सटीक उत्तर प्राप्त करने की उम्मीद कर रहा हूं और अधिक स्पष्टीकरण पोस्ट करता हूं। मैं 2 वर्गों है:नेस्टेड कक्षाओं के साथ लैम्ब्डा

public class Employee 
{ 
    public string Name { get; set; } 
    public List<Cars> Cars { get; set; } 
} 

public class Car 
{ 
    public int CarID { get; set; } 
    public CarTypes CarType { get; set; } 
    public enum CarTypes 
    { 
     Van, 
     SmallCar 
    } 
} 

मैं केवल सभी कर्मचारी हैं कि वैन लैम्ब्डा का उपयोग कर SmallCars के साथ उन लोगों की अनदेखी करने के लिए आवंटित करने की कोशिश कर रहा हूँ, मैं इस लाइन की कोशिश की:

List<Employee> EmployeesWithVans = AllEmployees.Where(emps => emps.Car.Any(cartype => cartype.CarType == Car.CarTypes.Van)).ToList(); 

लेकिन यह सब कर्मचारियों हो जाता है यदि कम से कम एक वैन एक कर्मचारी (.Any) के लिए आवंटित किया जाता है अगर मैं (.All) की कोशिश इसे वापस कुछ भी नहीं के रूप में नहीं सभी कर्मचारियों लाएगा वान है।

कोई विचार अगर यह नेस्टेड लैम्ब्डा का उपयोग करके हासिल किया जा सकता है?

धन्यवाद।

संपादित करें:

Employee Mark = new Employee(); 
Mark.Cars.Add(new Car() { CarType = Car.CarTypes.Van, CarID = 12 }); 
Mark.Cars.Add(new Car() { CarType = Car.CarTypes.Van, CarID = 13 }); 
Mark.Cars.Add(new Car() { CarType = Car.CarTypes.SmallCar, CarID = 14 }); 

Employee Lisa = new Employee(); 
Lisa.Cars.Add(new Car() { CarType = Car.CarTypes.Van, CarID = 15 }); 
Lisa.Cars.Add(new Car() { CarType = Car.CarTypes.SmallCar, CarID = 16 }); 
Lisa.Cars.Add(new Car() { CarType = Car.CarTypes.SmallCar, CarID = 17 }); 

    List<Employee> EmployeesWithVans should contain: 

    Employee FilteredMark contains: 
    Mark.Cars.Add(new Car() { CarType = Car.CarTypes.Van, CarID = 12 }); 
    Mark.Cars.Add(new Car() { CarType = Car.CarTypes.Van, CarID = 13 }); 

    Employee FilteredLisa contains: 
    Mark.Cars.Add(new Car() { CarType = Car.CarTypes.Van, CarID = 15 }); 
+0

ऐसा लगता है कि वह चाहता है कि कर्मचारी जो छोटी कार भी न लें ... –

+0

आपने 'carid' आदि का उल्लेख नहीं किया है .. हालांकि मैंने आपके अपडेट के अनुसार अपना जवाब संपादित कर दिया है .. –

उत्तर

2

ऐसा करें:

List<Employee> Temp = AllEmployees.Where(emps => emps.Cars.Any(cartype => cartype.CarType == Cars.CarTypes.Van)).ToList(); 

List<Employee> EmployeesWithVans = (from item in Temp 
      select new Employee{ 
            Name = item.Name, 
            Cars = (item.Cars.Where(car => car.CarType == Cars.CarTypes.Van)).ToList() 
           }).ToList(); 

यह मैं क्या करने की कोशिश की (LINQPad में) है:

void Main() 
{ 
    List<Employee> AllEmployees = new List<Employee>(); 

    List<Cars> lcars1 = new List<Cars>(); 
    Cars car1 = new Cars(); 
    car1.CarType = Cars.CarTypes.Van; 
    lcars1.Add(car1);lcars1.Add(car1); 

    Cars car2 = new Cars(); 
    car2.CarType = Cars.CarTypes.SmallCar; 
    lcars1.Add(car2); 

    List<Cars> lcars2 = new List<Cars>(); 
    lcars2.Add(car1);lcars2.Add(car2);lcars2.Add(car2); 

    AllEmployees.Add(new Employee(){ Name="emp1", Cars = lcars1}); 
    AllEmployees.Add(new Employee(){ Name="emp2", Cars = lcars2}); 
    AllEmployees.Add(new Employee(){ Name="emp3", Cars = lcars1 }); 
    AllEmployees.Add(new Employee(){ Name="emp4", Cars = lcars2}); 

    List<Employee> Temp = AllEmployees.Where(emps => emps.Cars.Any(cartype => cartype.CarType == Cars.CarTypes.Van)).ToList(); 

    List<Employee> EmployeesWithVans = (from item in Temp 
      select new Employee{ 
             Name = item.Name, 
             Cars = (item.Cars.Where(car => car.CarType == Cars.CarTypes.Van)).ToList() 
           }).ToList(); 

    EmployeesWithVans.Dump(); 
} 

आउटपुट:

+०१२३५१६४१०६

enter image description here

+0

यह सभी कर्मचारियों को वापस कर देगा जो ** ऐसा नहीं ** एक वैन है - मुझे नहीं लगता कि वह है क्या ओ पी – BrokenGlass

+0

हाँ मैं बस यह कोशिश कर रहा था और उस पाया चाहता है .. उनका कहना है कि –

+0

@maya के लिए मेरे कोड .. Thanx बदल गया है है: मैं अद्यतन किया है मेरे उत्तर –

0

क्या आप यह चाहते हैं? (कम से कम एक वैन, लेकिन कोई smallcar साथ सभी कर्मचारियों)

var EmployeesWithVans = AllEmployees 
         .Where(emps => emps.Cars.Any(cartype => cartype.CarType == Cars.CarTypes.Van) 
             && !emps.Cars.Any(cartype => cartype.CarType == Cars.CarTypes.SmallCar)) 
         .ToList(); 
0

क्वेरी सही है, तो यह अगर यह एक वैन असाइन किया गया है वापसी अनुक्रम के लिए एक Employee कहते हैं। मुझे पूरा यकीन नहीं है कि सवाल कहां है, क्या आपको लगता है कि आपकी क्वेरी कुछ भी वापस नहीं करेगी क्योंकि सभी कर्मचारियों के पास वैन नहीं है? यदि हाँ, यह एक Where ऑपरेटर के कार्यान्वयन होगा:

foreach(var elem in input) 
{ 
    if (predicate(elem)) 
    yield return elem; 
} 

विधेय, आपके अनुक्रम में सभी तत्वों को लागू किया जाएगा यदि तत्व यह पूरा करता है, यह अनुक्रम के भाग के रूप में लौटा दी जाएगी।

+0

@ ब्रोकनग्लस @ फेमेरेफ़ @ शेखर_Pro मैंने प्रश्न में उदाहरण जोड़ा है, क्या यह समझ में आता है, एक नई कर्मचारी सूची का उत्पादन जिसमें कर्मचारी वैन की कार वैन शामिल हैं केवल जोड़ा गया? – Maya

संबंधित मुद्दे