我正在开发我的Epicor ERP在BPM的前/后处理中调用的外部.dll。 .dll是用C#编写的,Epicor传递.dll数据集。
我看过代码示例要么更改了行,要么是FirstOrDefault而不是两者都有。
此代码始终为null,因此我的做法永远不会被调用。
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不为null并执行一些工作:
var ttQuoteDtl_xRow = ds.QuoteDtl.FirstOrDefault();
但我担心它不会成为已添加,更新或删除的行。
答案 0 :(得分:1)
你可以将两者结合起来,Linq语句是可组合的。
var quoteDtlRow =
ds.QuoteDtl
.Where(r =>
r.RowMod == IceRow.ROWSTATE_ADDED ||
r.RowMod == IceRow.ROWSTATE_UPDATED ||
r.RowMod == IceRow.ROWSTATE_DELETED
).FirstOrDefault();
如果这始终为null,那么我们可能需要查看更多代码。
顺便提一下,如果DS是传递给BPM方法的数据集,那么来自ds.QuoteDetail
的行会实现IceRow接口。这提供了方法.Added()
,.Updated()
,.Deleted()
和.Unchanged()
,意味着上述内容可以缩短为
var quoteDtlRow =
ds.QuoteDtl
.Where(
r => !r.Unchanged()
).FirstOrDefault();