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();
我正在尝试从填充的数据表中获取不同的值,但我无法对其进行编译。我在 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();