C# LINQ 从 DataTable 或 DataView 中选择 2 个值匹配的行

问题描述 投票:0回答:1

我将

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
做到这一点?

c# linq datatable dataview
1个回答
1
投票

如果我理解正确的话,你想根据 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
来添加自定义逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.