如何在数据表中获得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();
但我担心它不会是一个已添加,更新或删除的行
您可以将两者组合起来,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();