2015-05-08 3 views
0

У меня есть DataTable, который может иметь полудубличные строки. В примере изображения две выделенные строки имеют одинаковые значения, но суммы в столбцах «Сумма». Мне нужно будет идентифицировать эти строки и суммировать сумму $. Данные поступают из текстового файла, и нет ключа для однозначной идентификации строк.Цифры дубликатов данных DataTable

enter image description here

Я смотрел на некоторые ответы, как это один Best way to remove duplicate entries from a data table, но в моем случае было бы необходимо, чтобы соответствовать не только на одну колонку, но 10.

Также я пробовал различные запросы LINQ, но не был успешным в далеко.

Это SQL-запрос, который делает работу:

SELECT [Date1],[Date2],[Date3] 
     ,SUM([Amount1]) as Summary1 
     ,SUM([Amount2]) as Summary2 
     ,SUM([Amount3]) as Summary3 
     ,[col1],[col2],[Rate1],[Rate2],[Rate3],[product],[comment] 
    FROM [Table] 
    group by [Date1],[Date2],[Date3],[col1],[col2],[Rate1],[Rate2],[Rate3],[product],[comment] 

EDIT: Просто для уточнения, SQL-запрос был пример того, как я мог бы получить успешные результаты, если я запрашивая SQL таблицу.

+0

Вам нужно сделать 'GroupBy' некоторые функции, такие как Date 1, col 1 и т. Д. –

+0

, так что в чем проблема или вопрос здесь @AidaM делает запрос, дает правильные результаты ..? также если вы загружаете/читаете данные из текстового файла .. это на самом деле довольно легко сделать .. вы знакомы с чем-то, называемым 'Control Break Processing' google, как использовать' GroupBy', если вы работаете с Sql Query – MethodMan

+0

I просто протестировали запрос в SQL, но мои данные приложения не поступают и не идут на SQL. Я обрабатываю входные данные, сохраняя их в datatable и после обработки будет экспортироваться как файл Excel. Мне нужно сделать то, что пример SQL-запроса будет делать с LINQ или каким-либо другим способом. @MethodMan – AidaM

ответ

0

Это, как вы могли бы сделать это с EF:

var result=db.Table 
    .GroupBy(r=>new { 
     r.Date1, 
     r.Date2, 
     r.Date3, 
     r.col1, 
     r.col2, 
     r.Rate1, 
     r.Rate2, 
     r.Rate3, 
     r.product, 
     r.comment}, 
    p=>new { 
     p.Amount1, 
     p.Amount2, 
     p.Amount3}, 
    (key,vals)=>new { 
     key.Date1, 
     key.Date2, 
     key.Date3, 
     Amount1=vals.Sum(v=>v.Amount1), 
     Amount2=vals.Sum(v=>v.Amount2), 
     Amount3=vals.Sum(v=>v.Amount3), 
     key.col1, 
     key.col2, 
     key.Rate1, 
     key.Rate2, 
     key.Rate3, 
     key.product, 
     key.comments} 
    ); 

Незначительные модификации, если вы на самом деле делают это из DataTable:

var result=dt.AsEnumerable() 
    .GroupBy(d=>new { 
     Date1=d.Field<datetime>("Date1"), 
     Date2=d.Field<datetime>("Date2"), 
     Date3=d.Field<datetime>("Date3"), 
     col1=d.Field<string>("col1"), 
     col2=d.Field<string>("col2"), 
     Rate1=d.Field<decimal>("Rate1"), 
     Rate2=d.Field<decimal>("Rate2"), 
     Rate3=d.Field<decimal>("Rate3"), 
     product=d.Field<string>("product"), 
     comments=d.Field<string>("comments")}, 
    p=>new { 
     Amount1=p.Field<decimal>("Amount1"), 
     Amount2=p.Field<decimal>("Amount2"), 
     Amount3=p.Field<decimal>("Amount3")}, 
    (key,vals)=>new { 
     key.Date1, 
     key.Date2, 
     key.Date3, 
     Amount1=vals.Sum(v=>v.Amount1), 
     Amount2=vals.Sum(v=>v.Amount2), 
     Amount3=vals.Sum(v=>v.Amount3), 
     key.col1, 
     key.col2, 
     key.Rate1, 
     key.Rate2, 
     key.Rate3, 
     key.product, 
     key.comments} 
    ); 

Если вам нужен результат как DataTable, вам может использовать один из многих методов расширения List To Datatable. Просто добавьте «.ToList(). AsDataTable()» в конце вышеприведенного запроса, чтобы вернуть его в datatable.

+1

В этом потоке есть несколько примеров методов расширения: http://stackoverflow.com/questions/9937573/convert-select-new-to-datatable –

+0

Спасибо за помощь, которая отлично поработала! Я заглянул в преобразование его обратно в DataTable, но не нужно; вместо этого я перебирал каждую строку результата и генерировал свой окончательный файл Excel Excel. @ Robert-Макка – AidaM

Смежные вопросы