我有像
这样的数据表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;
}
通过使用linq查询,我想执行排序并需要唯一的记录。
我这样做
var query = from c in functiongettable().AsEnumerable().OrderBy("Name").Distinct() select c;
但是得到错误:
无法从用法推断出方法'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,System.Func)'的类型参数。尝试明确指定类型参数。
如何解决这个问题?
提前致谢
答案 0 :(得分:2)
尝试在 Distinct 语句中指定 DataRowComparer.Default 。
<强>更新强>
排序时使用row.Field(“Name”)
再次更新:
var query = (from c in functiongettable().AsEnumerable()
orderby c.Field<string>("Name")
select c).Distinc(DataRowComparer.Default);
答案 1 :(得分: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);
}
答案 2 :(得分:1)
您不能将String作为OrderBy()中的参数传递。您需要传递身份函数,如下所示:
functiongettable().AsEnumerable().OrderBy(x=>x.Field<string>("Name")).Distinct()
我不认为你会在这里得到明显的结果,因为方法Distinct()将使用TSource
的默认相等运算符,在这种情况下它将是DataRow
。它不会根据您string
列的Name
值进行区别选择。