gpt4 book ai didi

c# - 标记 DataTable 中的非唯一行

转载 作者:太空狗 更新时间:2023-10-29 23:41:59 25 4
gpt4 key购买 nike

我有一个数据表,我想检查其中三列中的值是否唯一。如果不是,则最后一列应填充值组合首次出现的行号。

例如这张表:

ID    Name    LastName    Age    Flag
-------------------------------------
1 Bart Simpson 10 -
2 Lisa Simpson 8 -
3 Bart Simpson 10 -
4 Ned Flanders 40 -
5 Bart Simpson 10 -

应该导致这个结果:

Line  Name    LastName    Age    Flag
-------------------------------------
1 Bart Simpson 10 -
2 Lisa Simpson 8 -
3 Bart Simpson 10 1
4 Ned Flanders 40 -
5 Bart Simpson 10 1

我通过使用两个嵌套的 for 循环迭代 DataTable 并比较值来解决这个问题。虽然这适用于少量数据,但当 DataTable 包含大量行时它变得相当慢

我的问题是:考虑到数据量可能在 100 到 20000 行之间变化,这个问题的最佳/最快解决方案是什么?
有没有办法使用 LINQ 来做到这一点? (我不是太熟悉,但我想学习!)

最佳答案

我无法评论您如何在 C#/VB 中使用数据表执行此操作,但如果您可以将其全部移动到 SQL,您的查询将如下所示:

declare @t table (ID int, Name varchar(10), LastName varchar(10), Age int)
insert into @t values (1, 'Bart' , 'Simpson', 10 )
insert into @t values (2, 'Lisa', 'Simpson' , 8 )
insert into @t values (3, 'Bart', 'Simpson' , 10 )
insert into @t values (4, 'Ned', 'Flanders' , 40 )
insert into @t values (5 , 'Bart', 'Simpson' , 10 )

select t.*,
(select min(ID) as ID
from @t t2
where t2.Name = t.Name
and t2.LastName = t.LastName
and t2.id < t.id)
from @t t

我在这里定义了一个用于演示目的的表。我想您或许可以将其转化为 LINQ。

关于c# - 标记 DataTable 中的非唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com