1

私が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 に置き換え、名前をそのままにしておくことです。

4

1 に答える 1

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()

于 2010-07-18T18:57:20.187 に答える