0

我有一张包含个人数据的表格,如下所示:

 Identifier Name Phone Address
 .............................
     1       aa    23    abc
     2       bb    22    abd
     2       cc    11    aaa
     3       dd    44    amd
     4       fa    33    agd
     2       ds    14    dad
     3       as    55    fgg

我想使用 LINQ 获取具有相同标识符的记录,以获得类似的内容

 Identifier Name Phone Address
 .............................
     2       bb    22    abd
     2       cc    11    aaa
     2       ds    14    dad
     3       dd    44    amd
     3       as    55    fgg

我可以按标识符排序并复制到一个新的 DataTable,然后解析它并获取具有相同标识符的记录,但我猜这会很昂贵。有没有更短的方法?谢谢 !

4

2 回答 2

2

类似下面的代码将过滤重复项并将其提取到具有相同架构的新 DataTable 中。代码假定Identifier是一个int. 如果适用,请替换为适当的名称和类型。

var extractedDuplicates = (from row in table.AsEnumerable()
                           group row by row.Field<int>("Identifier") into rows 
                           where rows.Count() > 1
                           from row in rows
                           select row).CopyToDataTable();

试一试,看看能走多远。如果有任何机会没有任何重复,您将希望将其拆分为多个语句,CopyToDataTable()如果没有要复制的行则会抛出。

var duplicateRows = from row in table.AsEnumerable()
                    group row by row.Field<int>("Identifier") into rows 
                    where rows.Count() > 1
                    from row in rows
                    select row;

DataTable extractedDuplicates;
if (duplicateRows.Any())
    extractedDuplicates = duplicateRows.CopyToDataTable();
else
    extractedDuplicates = table.Clone();

当然,如果您不需要新的 DataTable,则完全省略此代码的第二部分,只需使用duplicateRows.

于 2013-03-28T03:21:17.607 回答
-1
select * from YourTable a where a.Identifier in 
(
     select aa.Identifier from YourTable aa group by aa.Identifier 
     having (count(aa.Identifier ) > 1)
)
于 2013-03-28T03:21:28.060 回答