【发布时间】:2018-03-28 04:22:24
【问题描述】:
我有两个 DataTable,我有一个过滤匹配记录的功能。以下是我的功能:
public static DataTable FilterCandidates(DataTable FullCandidateData, DataTable RequiredCandidateIDs)
{
DataTable ReqCandidateData = new DataTable();
try
{
var MacthingIDs = FullCandidateData.AsEnumerable().Select(r => r.Field<string>("Candidate_ID")).Intersect(RequiredCandidateIDs.AsEnumerable().Select(r => r.Field<string>("Candidate_ID")));
ReqCandidateData = (from row in FullCandidateData.AsEnumerable()
join Candidate_ID in MacthingIDs
on row.Field<string>("Candidate_ID") equals Candidate_ID
select row).CopyToDataTable();
return ReqCandidateData;
}
catch (Exception ex)
{
ReqCandidateData = FullCandidateData.Clone();
return ReqCandidateData;
}
}
有没有其他有效的方法可以做到这一点,不知何故我不喜欢假设异常等同于没有匹配的记录。我也可以通过查找长度来做到这一点,但它会大大增加循环数,我的第一个 DataTable 中有大约 90,000 个候选者,并且还在不断增长。
另外,如果我有多列比较,例如 Candidate_ID 和 Job_ID
,请告诉我该怎么做【问题讨论】:
标签: c# asp.net performance linq datatable