猿问

数据表上的Linq查询

数据表上的Linq查询

我试图对DataTable对象执行LINQ查询,奇怪的是,我发现在DataTables上执行这样的查询并不简单。例如:

var results = from myRow in myDataTablewhere results.Field("RowNo") == 1select results;

这是不允许的。我怎么能像这样工作呢?

我很惊讶LINQ查询在DataTables上是不允许的!


开心每一天1111
浏览 463回答 3
3回答

烙印99

您不能查询DataTable氏行收藏,自DataRowCollection没有实现IEnumerable<T>..您需要使用AsEnumerable()延展DataTable..就像这样:var&nbsp;results&nbsp;=&nbsp;from&nbsp;myRow&nbsp;in&nbsp;myDataTable.AsEnumerable()where&nbsp;myRow.Field<int>("RowNo")&nbsp;==&nbsp;1select&nbsp;myRow;正如基思所说,你需要添加一个引用System.Data.DataSetExstanceAsEnumerable()回报IEnumerable<DataRow>..如果你需要转换IEnumerable<DataRow>转到DataTable,使用CopyToDataTable()分机。下面是使用Lambda表达式查询,var&nbsp;result&nbsp;=&nbsp;myDataTable&nbsp;&nbsp;&nbsp;&nbsp;.AsEnumerable() &nbsp;&nbsp;&nbsp;&nbsp;.Where(myRow&nbsp;=>&nbsp;myRow.Field<int>("RowNo")&nbsp;==&nbsp;1);

慕村225694

var&nbsp;results&nbsp;=&nbsp;from&nbsp;DataRow&nbsp;myRow&nbsp;in&nbsp;myDataTable.Rows &nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;(int)myRow["RowNo"]&nbsp;==&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;myRow

泛舟湖上清波郎朗

这并不是故意不允许在DataTable上使用它们,而是因为DataTables在IQueryable和GenericIEnDigable构造之前就可以执行Linq查询。这两个接口都需要某种类型的安全验证。DataTable不是强类型的。例如,这也是人们不能对ArrayList进行查询的原因。要使Linq工作,您需要将结果映射到类型安全对象,然后对其进行查询。
随时随地看视频慕课网APP
我要回答