0

重複する複数の値を持つことができる単一のテキスト列「タイトル」を持つデータテーブルがあります。データビューを使用して重複を削除できます。

DataView v = new DataView(tempTable);
tempTable = v.ToTable(true, "Title");

しかし、ループせずに、個別の値ごとに重複の数を取得するにはどうすればよいですか?

4

2 に答える 2

1

ループしたりLinqを使用したりしたくない場合は、それを行う方法はありませんが、該当する場合は、もう1つの条件でデータテーブルの計算列を使用できます。つまり、データはこのような2つの関連するテーブルにある必要があります。

DataRelation rel = new DataRelation("CustToOrders", data.Tables["Customers"].Columns["customerid"],    data.Tables["Orders"].Columns["customerid"]);
data.Relations.Add(rel);

Ordersテーブルの外部キーとしてそのcustomeridフィールドがあるとすると、重複があります。この方法で重複の数を取得できます。

data.Tables["Customers"].Columns.Add("Duplicates",
   GetType(Decimal), "Count(child.customerid)");
于 2010-08-09T11:51:07.973 に答える
0

私があなたが望む結果を得る方法は次のようになります:

tempTable.Rows.Cast<DataRow>()
    .Select(dr => Convert.ToString(dr[0]))
    .GroupBy(dr => dr)
    .Select(g => new { Title = g.Key, Count = g.Count() });

ただし、実際には内部でループしています。実際、各レコードを調べずにそのようなグループ化を行う方法を考えることはできません。

欠点は、その式の結果が一連の匿名型インスタンスになることです。それでも結果をDataViewにしたい場合は、最後のSelectを書き直して、2つの列を持つ新しいDataRowを作成し、それらをDataViewに渡す新しいDataTableに押し込むことができます。

于 2010-08-08T11:53:42.847 に答える