2016-08-03 9 views
0

Ich habe eine Klasse:Filterliste mit Linq

public class Car 
{ 
    public string Color { get; set; } 

     public string Speed { get; set; } 
} 

Und ein Beispiel:

List<Car> Cars = new List<Car>() 
{ 
    new Car() 
    { 
      Color = "Green". 
      Speed = "100" 
     }, 
     new Car() 
    { 
      Color = "Yellow". 
      Speed = "150" 
     } 
} 

Ich möchte diese Liste filtern

ich tun:

List<Car> Conditions = new List<Car>() 
{ 
    new Car() 
    { 
      Color = "Green". 
      Speed = "100" 
    }, 
    new Car() 
    { 
      Color = "Yellow". 
      Speed = "100" 
    }, 
    ....... 
} 

Wie man meine Liste durchsucht und nur das Auto nimmt, das entspricht ds zumindest zu einem Zustand mit Linq?

Hier, nehmen Sie nur den ersten Index meiner Liste zum Beispiel

Meine erwartete Ausgabe:

List<Car> Cars = new List<Car>() 
    { 
     new Car() 
     { 
       Color = "Green". 
       Speed = "100" 
      } 
    } 

Da Farbe und Geschwindigkeit Übereinstimmung mit einem Index von Conditions

+1

Auf welchem ​​Zustand möchten Sie filtern? Was ist die erwartete Ausgabe? Und zu guter Letzt, was hast du probiert? – RePierre

+1

Mögliches Duplikat von [Filtern einer Liste mit LINQ] (http://stackoverflow.com/questions/5090568/filtering-a-list-using-linq) – Max

+0

Versuchen Sie zunächst, etwas über LINQ zu lesen. Sone Beispiele hier: http://www.tutorialsteacher.com/linq/linq-tutorials oder hier: https://msdn.microsoft.com/en-us/library/bb397933.aspx – MKasprzyk

Antwort

1

Wenn Sie setzen müssen von Autos

var result = Cars 
    .Where(car=>Conditions.Any(cond=> 
     cond.Speed == car.Speed && cond.Color == car.Color)).ToArray(); 

Wenn Sie nur ein Auto benötigen Satz von Übereinstimmungen zu Ihrer Bedingung

var result = Cars 
    .FirstOrDefault(car=>Conditions.Any(cond=> 
     cond.Speed == car.Speed && cond.Color == car.Color)); 
+0

"Wie man meine Liste und nimm nur das Auto, das mindestens einer Bedingung mit Linq entspricht? " Also 'var result = Autos .FirstOrDefault (Auto => Conditions.Any (cond => cond.Speed ​​== Auto.Speed ​​&& cond.Color == car.Color))' – MKasprzyk

+0

@MKasprzyk thx, behoben – tym32167

2
var FilteredCars = Cars 
    .Where(car => Conditions.Any(c => car.Color == c.Color && car.Speed == c.Speed)); 

Wenn CarEquals + GetHashCode auf diese Weise außer Kraft gesetzt würden Sie auch diese verwenden:

var FilteredCars = Cars.Where(Conditions.Contains);