我将
CRMDataSetSent
转换为包含完整记录列表的 DataTable
/DataView
。
DataTable CRMDataSetSent_Dt = new DataTable();
da.Fill(CRMDataSetSent_Dt, Variables.CRMDataSetSent);
DataView CRMDataSetSent_Dv = new DataView(CRMDataSetSent_Dt);
distinct_Wo_Wop_Dt
存储不同的 msdyn_workorderid
+ msdyn_workorderproductid
对。
DataTable distinct_Wo_Wop_Dt= CRMDataSetSent_Dv.ToTable(true, "msdyn_workorderid", "msdyn_workorderproductid");
对于
distinct_Wo_Wop_Dt
中的每一行,我需要从 CRMDataSetSent_Dt
/CRMDataSetSent_Dv
中获取两个值匹配的行。
现在我正在通过
foreach
循环执行此操作,这并不像我希望的那么高效。
有没有办法通过
LINQ
做到这一点?
如果我理解正确的话,你想根据 2 个字段删除重复项。您根本不需要
DataView
临时存储,这不是过滤行的有效方法,而且不可读。
您可以使用
GroupBy
:
CRMDataSetSent_Dt = CRMDataSetSent_Dt.AsEnumerable()
.GroupBy(r => (msdyn_workorderid:r.Field<int>("msdyn_workorderid"),msdyn_workorderproductid:r.Field<int>("msdyn_workorderproductid")))
.Select(g => g.First())
.CopyToDataTable();
我假设这些字段的类型为
int
,如有必要,请相应地更改它。您还可以更改应采用哪一行的逻辑。我干脆用了任意的,第一个。例如,您可以添加 OrderBy
来添加自定义逻辑。