DataView上的ASP.net LINQ

时间:2010-07-18 18:53:43

标签: asp.net dataview

当我有一个DataView操作

 EnumerableRowCollection<DataRow> query 
    = from order in _table.AsEnumerable()
      where order.Field<Int32>("key") > 2 && order.Field<Int32>("key") < 4
      select order.Field<Int32>("key")=1000, order.Field<string>("name");   

我无法形成上述表达。

当我尝试

select new {key= 1000,name= order.Field<string>("name") };

我得到了

    Cannot implicitly convert type 
   'System.Data.EnumerableRowCollection<AnonymousType#1>'   
    to 'System.Data.EnumerableRowCollection<System.Data.DataRow>'

如何形成正确的查询?我的任务是将密钥替换为1000并保留名称。

1 个答案:

答案 0 :(得分:1)

当您撰写select new {key= 1000,name= order.Field<string>("name") }时,您正在创建一个与DataRow无关的新匿名类型。
因此,您无法将其分配给EnumerableRowCollection<DataRow>

要修复编译器错误,请将EnumerableRowCollection<DataRow>更改为var


但是,这不会解决您的根本问题 LINQ不能用于修改数据。

您需要使用普通foreach循环并设置key值,如下所示:

var affectedRows = from order in _table.AsEnumerable()
  where order.Field<Int32>("key") > 2 && order.Field<Int32>("key") < 4
  select row;
foreach(DataRow row in affectedRows) {
    row["key"] = 1000;
}

此代码将修改原始DataRow中的原始_table 如果您不想修改原始_table,可以通过拨打DataTable.Copy()进行复制。