2009-07-01 12 views
2

に私は並べ替えを実行したいとユニークなレコードを必要とするLINQクエリを使用することによりソート&ユニークなレコードは、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; 
} 

のようなデータテーブルを持っています。

私はこの

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

しかし、取得エラーのようにやっている:メソッドの

型引数のSystem.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable、System.Func) 'を使用から推測することはできません。型引数を明示的に指定してみてください。

これを解決するにはどうすればよいですか?事前に

おかげ

答えて

2

個別文でDataRowComparer.Defaultを指定してみてください。

UPDATE:

そして再び

UPDATEソートする場合row.Field( "名前")を使用します。

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

をあなたは、OrderByにデリゲートを渡す必要はありませんa 。

これを試してみてください:

 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

あなたは([並べ替えのパラメータとして文字列を渡すことはできません)。この中で

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

そして、私は(あなたが個別の方法として、ここでは明確な結果を得るとは思わない)TSourceのデフォルトの等価演算子を使用しますが、これは:あなたはそうのような恒等関数に渡す必要がありますケースはDataRowとなります。 Name列の値がstringに基づいて区別されません。

関連する問題