Получение дубликатов считается для каждого отдельного значения из таблицы данных - PullRequest
0 голосов
/ 08 августа 2010

У меня есть таблица данных с одним текстовым столбцом «Заголовок», который может иметь несколько значений с дубликатами. Я могу удалить дубликаты с помощью dataview.

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

Но как я могу получить количество дубликатов для каждого отдельного значения без зацикливания?

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Если вы не хотите использовать цикл или использовать Linq, то сделать это невозможно, но вы можете использовать вычисляемый столбец таблицы данных с еще одним условием, если это применимо к вам. То есть данные должны быть в двух связанных таблицах, подобных этой.

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

Учитывая, что поле customerid является внешним ключом в таблице Orders, поэтому в нем есть дубликаты. Вы можете получить количество дубликатов следующим образом:

data.Tables["Customers"].Columns.Add("Duplicates",
   GetType(Decimal), "Count(child.customerid)");
0 голосов
/ 08 августа 2010

То, как я могу получить желаемые результаты, будет выглядеть примерно так:

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

Тем не менее, это фактически петля под капотом. На самом деле, я не могу придумать способ сделать такую ​​группировку без проверки каждой записи.

Недостатком является то, что результатом этого выражения является последовательность экземпляров анонимного типа. Если вы по-прежнему хотите, чтобы результат представлял собой DataView, вы можете переписать последний вариант Select, чтобы создать новый DataRow с двумя столбцами, и поместить их в новый DataTable, который вы передаете в DataView.

...