2

私はLINQにかなり慣れていないので、このクエリを「EmpInfo」というデータテーブルに適用して並べ替えようとしています。

var sortedRows = (from myRow in EmpInfoDS.Tables["EmpInfo"].AsEnumerable()
                 orderby myRow["EmpID"] ascending
                 select myRow).ToArray();

これは機能します。次にやろうとしているのは、結果を同じデータテーブルにコピーすることです。

EmpInfoDS.Tables["EmpInfo"].Clear();
EmpInfoDS.Tables["EmpInfo"] = sortedRows.CopyToDataTable();

2行目は、次のエラーをスローします。

「プロパティまたはインデクサー'System.Data.DataTableCollection.this[string]'を割り当てることはできません-読み取り専用です」

誰かがこれに対処する方法を教えてください。そして、別の方法があれば教えてください。

4

3 に答える 3

1

エラーは、が読み取り専用プロパティTablesであるため、インデクサーを使用してテーブルを割り当てることができないことを示しています。したがって、問題を解決するには:

EmpInfoDS.Tables.Remove("EmpInfo");
DataTable dt = sortedRows.CopyToDataTable();
dt.TableName = "EmpInfo";
EmpInfoDS.Tables.Add(dt);
于 2012-10-28T12:44:54.403 に答える
0

私はこれがそれができる方法だと思います:(あなたは別のものを好むかもしれませんLoadOption

EmpInfoDS.Tables["EmpInfo"].Clear();
sortedRows.CopyToDataTable(EmpInfoDS.Tables["EmpInfo"], LoadOption.OverwriteChanges);

これも機能するはずです:

EmpInfoDS.Tables["EmpInfo"].Clear();
foreach (var row in sortedRows)
    EmpInfoDS.Tables["EmpInfo"].Rows.Add(row);
于 2012-10-28T12:41:39.760 に答える
0

LINQでは、実行の遅延に注意する必要があります。基本的に、クエリは、クエリからのデータが消費されるまで実行されません。クエリをすぐに実行する場合は、ToList()メソッドを使用します。

var sortedRows = EmpInfoDS.EmpInfo.OrderBy(e => e.EmpID).ToList();

次に、コードは単純です。

var employees = EmpInfoDS.EmpInfo;
employees.Clear();
foreach (var sortedRow in sortedRows)
    employees.Add(sortedRow);
EmpInfoDS.SaveChanges();        
于 2012-10-28T13:01:39.903 に答える