Linq查询DataTable和更新记录

时间:2017-06-21 14:35:09

标签: c# linq

我在内存中有一个数据表,我需要从中选择一些记录,遍历记录,对字段进行更改,然后将更改返回到数据表。我可以使用过滤器,视图和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'无法分配给 - 它只读”

我在这里缺少什么?我可以将此查询更新回原始数据表吗?

2 个答案:

答案 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;