linq on a DataTable giver 编译错误

linq on a DataTable giver compilation error

我正在尝试从填充的数据表中获取不同的值,但我无法对其进行编译。我在 Whosebug 上找到了一些代码,但无法编译。 那么,这个例子有什么问题:

DataTable dt = new DataTable(); 
var distinctRows = (from DataRow dRow in dt.Rows
                    select new { col1 = dRow["Col1"] }).Distinct();

我知道这段代码不会 return 任何东西,因为 dt 是空的,但它只是为了向您展示我正在尝试使用的 linq 并避免像 "show me the code for your table" 这样的问题我只是想知道为什么我无法在 visual studio 2013、c#、框架 4.5

中编译它

编译器 returns :

Error 127 'System.Data.DataRowCollection' does not contain a definition for 'Cast' and the best extension method overload 'System.Data.EnumerableRowCollectionExtensions.Cast(System.Data.EnumerableRowCollection)' has some invalid arguments C:\GTT\TFS\Test_App\Test app\FormRitLegeCMRList.cs 64 33 Palm

Error 128 Instance argument: cannot convert from 'System.Data.DataRowCollection' to 'System.Data.EnumerableRowCollection' C:\GTT\TFS\Test_App\Test app\FormRitLegeCMRList.cs 64 33 Palm

确保您在 cs 文件的顶部添加了 using 语句 System.Linq。那应该可以解决它。

using System.Linq;

除了@Sriram 指出的添加 using System.Linq; 之外。

您似乎对特定列的不同值感兴趣,没有必要投影到匿名类型(使用 new 关键字)。您也可以这样查询:

var query = dt.AsEnumerable()
    .Select(row => row.Field<string>("Col1"))
    .Distinct();

但是您必须在 Field 扩展方法中为 Col1 指定类型。您还可以这样做:

var query = dt.AsEnumerable()
    .Select(row => row["Col1"])
    .Distinct();