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 に抽出します。コードIdentifierint. 必要に応じて、適切な名前とタイプに置き換えます。

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 が必要ない場合は、このコードの 2 番目の部分を完全に省略して、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 に答える