我在内存中有一个数据表,我需要从中选择一些记录,遍历记录,对字段进行更改,然后将更改返回到数据表。我可以使用过滤器,视图和SQL来做到这一点,但我正在尝试在Linq中执行此操作。
var results = (from rows in dtTheRows.AsEnumerable()
select new
{
rows.Job,
}).Distinct();
foreach (var row in results)
{
firstRow = true;
thisOnHand = 0;
var here = from thisRow in dtTheRows.AsEnumerable()
orderby thisRow.PromisedDate
select new
{
thisRow.OnHandQuantity,
thisRow.Balance,
thisRow.RemainingQuantity
};
foreach(var theRow in here)
{
// business logic here ...
theRow.OnHandQuantity = 5;
} // foreach ...
第一个linq查询和foreach获取要考虑的数据子集列表。我把它包括在这里以防它是相关的。我的问题出在这一行:
heRow.OnHandQuantity = 5;
我的错误是: “错误19属性或索引器'AnonymousType#1.OnHandQuantity'无法分配给 - 它只读”
我在这里缺少什么?我可以将此查询更新回原始数据表吗?
答案 0 :(得分:0)
错误是自我描述性的,您无法更新/修改匿名类型。您必须从查询中返回要修改的原始实体。
select thisRow;
而不是
select new
{
thisRow.OnHandQuantity,
thisRow.Balance,
thisRow.RemainingQuantity
};
答案 1 :(得分:0)
var here = from thisRow in dtTheRows.AsEnumerable()
orderby thisRow.PromisedDate
select new
{
thisRow.OnHandQuantity,
thisRow.Balance,
thisRow.RemainingQuantity
};
不是在select中传递三个变量,而是传递thisRow本身。这可能会解决语句错误 - theRow.OnHandQuantity = 5;