如何在数据表中获得FirstOrDefault添加/更新/删除的数据行

本文关键字:更新 删除 数据 添加 FirstOrDefault 数据表 | 更新日期: 2023-09-27 18:06:38

我正在开发一个外部.dll,我的Epicor ERP在BPM的前/后处理中调用它。.dll是用c#编写的,Epicor向.dll传递一个数据集。

我见过的代码示例要么更改行或FirstOrDefault,但不是两者兼有。

这段代码总是空的,所以我的do某事永远不会被调用。

var ttQuoteDtl = ds.QuoteDtl.Where(r => r.RowMod == IceRow.ROWSTATE_ADDED || r.RowMod == IceRow.ROWSTATE_UPDATED || r.RowMod == IceRow.ROWSTATE_DELETED);
var ttQuoteDtl_xRow = (from ttQuoteDtl_Row in ttQuoteDtl select ttQuoteDtl_Row).FirstOrDefault(); 
if (ttQuoteDtl_xRow != null)
{
  //Do Something 
}

我可以让ttQuoteDtl不为空,并执行一些工作,如果我这样调用它:

var ttQuoteDtl_xRow = ds.QuoteDtl.FirstOrDefault();

但我担心它不会是一个已添加,更新或删除的行

如何在数据表中获得FirstOrDefault添加/更新/删除的数据行

您可以将两者组合起来,Linq语句是可组合的。

var quoteDtlRow = 
    ds.QuoteDtl
    .Where(r => 
        r.RowMod == IceRow.ROWSTATE_ADDED || 
        r.RowMod == IceRow.ROWSTATE_UPDATED || 
        r.RowMod == IceRow.ROWSTATE_DELETED
    ).FirstOrDefault();

如果this总是null,那么我们可能需要看到更多的代码。

顺便说一下,如果DS是传递给BPM方法的数据集,那么ds.QuoteDetail中的一行实现了IceRow接口。这提供了.Added(), .Updated(), .Deleted().Unchanged()的方法,这意味着以上可以缩短为

var quoteDtlRow = 
    ds.QuoteDtl
    .Where(
        r => !r.Unchanged()
    ).FirstOrDefault();