2017-03-31 4 views
0

Ich möchte eine Liste erstellen, die zwei int-Werte enthält, sagen wir arrfirst und eine andere Liste, die Listen von arrfirst enthält, sagen wir arrsecond, dann prüfen, ob arrsecond ein enthält definiert arrfirst. Jetzt habe ich Listen erstellt, aber wenn ich versuche, .Contains zu verwenden, funktioniert es nicht.Wie überprüft man, ob eine Liste von Listen eine andere Liste enthält

List<List<int>> Eklenenler = new List<List<int>>(); 

for (int i = 0; i < YourTable.Rows.Count; i++) 
     { 
      prjAd = YourTable.Rows[i].Field<string>("F1"); 
      if (prjAd != "Servis Adresi") 
      { 
       wesAd = YourTable.Rows[i].Field<string>("F2"); 
       RowPrj = tbProjeler.AsEnumerable().Where(r => r.Field<string>("prjAd") == prjAd).FirstOrDefault(); 
       RowWes = tbServisler.AsEnumerable().Where(k => k.Field<string>("wesAd") == wesAd).FirstOrDefault(); 
       prjId = RowPrj.Field<int>("prjId"); 
       wesId = RowWes.Field<int>("wesId"); 
       List<int> temp = new List<int>(); 
       temp.Add(prjId); 
       temp.Add(wesId); 
       if (!Eklenenler.Contains(temp)) 
       { 
        sqlExProjeEkle = "INSERT INTO NLK_PRJ_Webservisler (prjId,wesId) Values (" + prjId + "," + wesId + ")"; 
        dco.Execute(sqlExProjeEkle); 
        Eklenenler.Add(temp); 

       } 
       else 
       { 

       } 
      }             
     } 

Dies ist mein Code. Wenn ich debugging, kann ich sehen temp Werte sind richtig und auch bei der zweiten Schleife, temp ist in Eklenenler Liste, aber es geht immer in if Block. Zum Beispiel, erste Schleife zeigt und temp[1]=42 geht in Block und in der zweiten Schleife wieder und temp[1]=42 auch Eklenenler[0][0]=36 und Eklenenler[0][1]=42 so enthält es Temp, aber es geht immer noch in. Wie kann ich dieses Problem lösen und warum dies falsch und kann nicht zurückgegeben finden Sie diese temp in Eklenenler. Vielen Dank.

+1

'if (row.sequenceEquals (anotherRow))'? –

Antwort

1

Man könnte es mit Linq zu tun in nur einer Zeile mit so etwas wie dieses nicht

if (!Eklenenler.Any(c => c.SequenceEqual(temp))) 
{ 
    sqlExProjeEkle = "INSERT INTO NLK_PRJ_Webservisler (prjId,wesId) Values (" + prjId + "," + wesId + ")"; 
    dco.Execute(sqlExProjeEkle); 
    Eklenenler.Add(temp); 

} 
else 
{ 

} 

Vergessen

using System.Linq; 
0

Hier ist eine Antwort auf fügen Sie eine foreach-Schleife.

foreach (List<int> list in Eklenenler) 
{ 
    if (list.SequenceEqual(temp)) 
    { 
     //Do work 
    } 
} 
Verwandte Themen