如何将LINQ查询中的“var”填充到同一个数据表中?

时间:2012-10-28 12:30:19

标签: c# database linq ado.net datatable

我是LINQ的新手,我正在尝试将此查询应用于名为“EmpInfo”的数据表中进行排序。

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

这很有效。我要做的下一件事是将结果复制到SAME数据表中。

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

第二行引发以下错误:

  

“属性或索引器'System.Data.DataTableCollection.this [string]'   无法分配 - 它只读“

请有人告诉我如何处理这件事。如果还有其他方式,请告诉我。

3 个答案:

答案 0 :(得分:1)

错误表示您无法使用索引器分配表,因为Tables只读属性。所以要解决这个问题:

EmpInfoDS.Tables.Remove("EmpInfo");
DataTable dt = sortedRows.CopyToDataTable();
dt.TableName = "EmpInfo";
EmpInfoDS.Tables.Add(dt);

答案 1 :(得分: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);

答案 2 :(得分: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();