【问题标题】:How to get the FirstOrDefault added/updated/deleted data Row in a data Table?如何在数据表中获取 FirstOrDefault 添加/更新/删除的数据行?
【发布时间】:2017-01-20 08:28:16
【问题描述】:

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

我看到过更改行或 FirstOrDefault 但不能同时更改的代码示例。

此代码始终为空,因此我的操作永远不会被调用。

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();

但我担心它不会是已添加、更新或删除的行。

【问题讨论】:

  • 第一条语句执行后ttQuoteDtl是否为空?
  • 附注(from ttQuoteDtl_Row in ttQuoteDtl select ttQuoteDtl_Row) 什么都不做,可以换成ttQuoteDtl

标签: c# linq dataset datarow epicorerp


【解决方案1】:

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

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

如果这始终为空,那么我们可能需要查看更多代码。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2019-02-09
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多