我有DataTable dt_Candidates
Candidate | First Name | Last Name
--------------------|----------------|---------------
John, Kennedy | John | Kennedy
Richard, Nixon | Richard | Nixon
Eleanor, Roosevelt | Eleanor | Roosevelt
Jack, Black | Jack | Black
Richard, Nixon | Richard | Nixon 我想在没有嵌套循环的情况下创建,最好使用Linq,一个包含DataTable的只包含的唯一值,如这个称为dt_Candidates2的值
Candidate | First Name | Last Name
--------------------|----------------|---------------
John, Kennedy | John | Kennedy
Eleanor, Roosevelt | Eleanor | Roosevelt
Jack, Black | Jack | Black 和一个名为RejectedCandidates的列表或数组,其中包含不同的重复项。
RejectedCandidates = {"Richard, Nixon"}发布于 2020-11-25 10:51:39
如前所述,我不认为它真的需要LINQ这里。可以是这样的:
DataTable dt = new DataTable();
dt.Columns.Add("Candidate");
dt.Columns.Add("First");
dt.Columns.Add("Last");
dt.PrimaryKey = new []{ dt.Columns["Candidate"] }; //means that dt.Find() will work
while(...){
string candidate = ...
if(dt.Rows.Find(candidate) != null)
RejectList.Add(...);
else
dt.Rows.Add(...);
}避免在.Any上使用LINQ的DataTable。这不仅仅是因为需要转换步骤或扩展库(请看这里)才能开始工作,然后它将使用循环来查找所需的信息;PrimaryKey的内置机制使用哈希表来进行更快的查找。
发布于 2020-11-30 10:50:11
var dt = new DataTable
{
Columns = {"Candidate", "First Name", "Last Name"},
Rows =
{
new object [] { "John, Kennedy", "John", "Kennedy"},
new object [] { "Richard, Nixon", "Richard", "Nixon"},
new object [] { "Eleanor, Roosevelt", "Eleanor", "Roosevelt"},
new object [] { "Jack, Black", "Jack", "Black"},
new object [] { "Richard, Nixon", "Richard", "Nixon"},
}
};您可以使用分组(groupBy)查找副本,过滤掉它们,然后使用DataTableExtensions.CopyToDataTable扩展方法创建一个新的DataTable:
var dt2 = dt.AsEnumerable()
.GroupBy(r => r["Candidate"])
.Where(g => g.Count() == 1)
.Select(g => g.First())
.CopyToDataTable();https://stackoverflow.com/questions/65002056
复制相似问题