简体   繁体   中英

Linq Query on DataTable and Update Records

I have a datatable in memory and I need to select some records from it, walk through the records making changes to fields and they same the changes back to the datatable. I can do this with filters, views, and sql but I'm trying to do it in 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 ...

The first linq query and foreach are gain the list of subsets of data to be considered. I include it here in case it is relevant. My problem is at this line:

heRow.OnHandQuantity = 5;

My error is: "Error 19 Property or indexer 'AnonymousType#1.OnHandQuantity' cannot be assigned to -- it is read only"

What am I missing here? Can I update this query back into the original datatable?

The error is self descriptive, you can't update/modify an anonymous type. You have to return the original entity you want to modify from your query.

select thisRow;

instead of

select new
{
   thisRow.OnHandQuantity,
   thisRow.Balance,
   thisRow.RemainingQuantity
};
var here = from thisRow in dtTheRows.AsEnumerable()
                       orderby thisRow.PromisedDate
                       select new
                       {
                           thisRow.OnHandQuantity,
                           thisRow.Balance,
                           thisRow.RemainingQuantity
                       };

Instead of passing three variables in select, pass thisRow itself. That may solve error on statement - theRow.OnHandQuantity = 5;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM