2009-07-01 75 views
2

我有一個像排序和唯一的記錄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; 
} 

DataTable中使用LINQ查詢我想執行排序,需要獨特的記錄。

我做這樣的

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:

並使用row.Field( 「名稱」)再次進行排序

UPDATE時:

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

你需要一個委託傳遞給OrderBy,不一個string

試試這個:

 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() 

而且我不認爲你會在這裏得到不同的結果,因爲方法Distinct()將使用TSource的默認等號運算符,在這種案件將是DataRow。它不會根據您的Name列的string值進行區分選擇。