我是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]' 无法分配 - 它只读“
请有人告诉我如何处理这件事。如果还有其他方式,请告诉我。
答案 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();