【问题标题】:Datatable.GetChanges() always returns nullDatatable.GetChanges() 始终返回 null
【发布时间】:2015-02-23 01:39:41
【问题描述】:

我想要做的是编辑匹配的行并更改列的值,但它一直返回 null。我相信这是因为我将查询保存到对象的方式,因为如果我直接访问查询,那么它每次都会继续处理查询。处理这个问题的最佳方法是什么?

using (SymbolsTableAdapter symbolAdapter = new SymbolsTableAdapter())
using (Dataset.SymbolsDataTable symbolTable = new Dataset.SymbolsDataTable())
{
    symbolAdapter.Fill(symbolTable);

    foreach (var error in errors)
    {
        var query = from c in symbolTable
                    where c.Symbol == error.Key && c.Market == error.Value
                    select c;

        Dataset.SymbolsRow row = query.AsParallel().FirstOrDefault();

        if (row != null)
        {
            row.isUnderReview = true;
        }
    }

    // now save
    if (symbolTable.GetChanges() != null)
    {
        symbolTable.AcceptChanges();
    }
}

【问题讨论】:

  • 你的代码有什么错误?它会进入循环吗?
  • @dotnetstep 它永远不会收到任何错误,但它永远不会点击 symbolTable.AcceptChanges();
  • 因为它从不进入循环,所以你的表在加载后不会改变,所以不会发现任何变化,所以无法接受变化。
  • @dotnetstep 我确实需要提一下,它确实进入了循环内部,并且确实到达了更改行中值的行
  • 尝试 Dataset.SymbolsRow row = query.FirstOrDefault();而不是你的 AsParallel

标签: c# linq dataset strongly-typed-dataset


【解决方案1】:

好的,我不确定为什么 AcceptChanges 实际上没有做任何事情,但我将代码更改为以下代码,它对任何人的未来参考都很好

Dataset.SymbolsDataTable tempSymbolsTable = new Dataset.SymbolsDataTable();
tempSymbolsTable = (Dataset.SymbolsDataTable)symbolTable.GetChanges();

                if (tempSymbolsTable != null)
                {
                    symbolAdapter.Update(tempSymbolsTable);
                    tempSymbolsTable.Dispose();
                }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2015-08-15
    • 2012-03-18
    • 2016-11-04
    • 2016-07-28
    • 2010-11-08
    • 2017-11-26
    相关资源
    最近更新 更多