2009-07-01 6 views
2

Ich habe eine Datentabelle wieSorting & Unique Records in Linq

public DataTable functiongettable() 
{ 
     DataTable dt = new DataTable(); 

     dt.Columns.Add("Name"); 
     dt.Rows.Add("Name1"); 
     dt.Rows.Add("Name5"); 
     dt.Rows.Add("Name6"); 
     dt.Rows.Add("Name3"); 
     dt.Rows.Add("Name3"); 
     dt.Rows.Add("Name6"); 
     dt.Rows.Add("Name3"); 
     dt.Rows.Add("Name5"); 
     dt.Rows.Add("Name5"); 

     return dt; 
} 

Durch die Verwendung von Linq-Abfrage I Sortierung durchführen möchten und müssen eindeutige Datensätze.

Die Art Argumente für die Methode ‚System.Linq.Enumerable.OrderBy (System.Collections.Generic.IEnumerable, System.Func):

Ich mag diese

var query = from c in functiongettable().AsEnumerable().OrderBy("Name").Distinct() select c; 

Aber immer Fehler mache 'kann nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben.

Wie löst man das?

Vielen Dank im Voraus

Antwort

2

Versuchen Sie, die DataRowComparer.Default in der Distinct Anweisung angeben.

UPDATE:

Und verwenden row.Field ("Name"), wenn wieder

UPDATE Sortierung:

var query = (from c in functiongettable().AsEnumerable() 
      orderby c.Field<string>("Name") 
      select c).Distinc(DataRowComparer.Default); 
1

Sie benötigen einen Delegaten OrderBy passieren, nicht a string.

Versuchen Sie folgendes:

 var query = dt.AsEnumerable() 
      .OrderBy(dr => dr.ItemArray[0] as string) 
      .Distinct(DataRowComparer.Default).Select(dr => dr.ItemArray[0]); 

     foreach (var item in query) 
     { 
      Console.WriteLine(item); 
     } 
1

Sie können nicht String als Parameter in SortiertNach() übergeben. Sie müssen wie so in der Identitätsfunktion weitergeben müssen:

functiongettable().AsEnumerable().OrderBy(x=>x.Field<string>("Name")).Distinct() 

Und ich glaube nicht, dass Sie unterschiedliche Ergebnisse hier wird das Verfahren, wie Distinct() die Standardgleichheits Betreiber des TSource verwenden, die in diesem Fall wird der DataRow sein. Es wird nicht eindeutig basierend auf dem string Wert Ihrer Name Spalte ausgewählt.