2017-10-22 3 views
0

Ich habe eine Liste von Listen:Vergleich der Liste in der Liste

List<Product> productList = new List<Product>() 
{ 
    new Product() 
    { 
     Id = 1, 
     Model = "Phone", 
     TypeProd = new CheckTypes 
     { 
      ChTypes = new List<CHType> 
      { 
       new CHType 
       { 
        Id = 8, 
        IdName = "261" 
       }, 
       new CHType 
       { 
        Id = 9 , 
        IdName = "149" 
       } 
      } 
     } 
    }, 
    new Product 
    { 
     Id = 1, 
     Model = "Printer", 
     TypeProd = new CheckTypes 
     { 
      ChTypes = new List<CHType> 
      { 
       new CHType 
       { 
        Id = 8, 
        IdName = null 
       }, 
       new CHType 
       { 
        Id = 8, 
        IdName = "261" 
       } 
      } 
     } 
    } 
}; 

Und ich mag das erste Element dieser Liste erhalten, indem die IdName Elemente mit einem string[] Vergleich:

string[] arrStr = new string[] { "261", "149" }; 

Wie kann ich das besser machen? Erprobt mit foreach und durch Erstellen eines temporären Objekts, das einen Array-Wert und dann Schnittpunkt verwendet, um zu vergleichen.

+0

Könnten Sie bitte ein vollständiges Beispiel für Ihren Algorithmus angeben? – palasjir

+0

Machen Sie Ihre arrStr als HashSet . Es ermöglicht Ihnen, schnell nachschlagen. –

Antwort

0

Sie könnten es tun ziemlich einfach mit LINQ:

var product = productList 
    .FindAll(x => x.TypeProd.ChTypes 
        .All(y => arrString.Contains(y.IdName)); 

Dieses Sie alle Produkte, deren geben TypeProd.ChTypes Elemente sind alle in arrString.
Für eine schnellere Leistung möchten Sie vielleicht arrString in eine HashSet<string> verwandeln.

+0

Gutes Beispiel. Aber Sie geben das erste Element zurück, ich habe es wahrscheinlich nicht richtig formuliert, aber ich möchte das erste Element in diesem Beispiel bekommen, aber es kann mehr Elemente geben. Ich möchte alle Elemente finden, die die Werte des Arrays enthalten. – Tibomso

+0

Dafür können Sie nur 'FirstOrDefault' zu' Wo (...) ändern. ToList() ' –

+0

Sie meinen IdName =" 261 "261 – Eldho

Verwandte Themen