안녕하세요
Data table에
고유번호, 명칭, 값 의 column으로
123, 가나다, 7
234, 나다라, 8
345, 다라마, 2
123, 가나다, 1
이 있을떄
고유번호 기준으로 중복값인 123을 찾아 값을 더할 수 있을까요?
결과물은 아래처럼 나오게 하려고 하는데요
123, 가나다, 8
234, 나다라, 8
345, 다라마, 2
포럼에 중복된 항목을 제거하는 방법은 찾았으나 값 합계를 못찾아서
엑셀의 '통합’과 같은 기능처럼 data table에서 중복값의 합계를 구하는 쿼리나 방법을 문의드립니다~
Hi everyone,
I keep the table that get from Sql Server as a data table.
This data table has ‘expense fields’ and ‘amount’ columns. Is it possible to find the subtotal of each of these expense fields and add them as additional rows to the datatable?
For example;
if this is my data table; (i am show it for instance in excel file but in the reality it is a data table)
[image]
i want to find this; (and then i will tranfer it in a excel file)
[image]
Here is sample data folders
ExpenseField…
확인해보시면 될듯합니다~~
아마 솔루션으로 채택된 댓글에 XAML 파일이 있을텐데 해당 파일 다운로드 받으셔서 참고하시면 될듯합니다~
1 Like
park363
(UncleDev)
September 22, 2020, 8:18am
3
Linq Group By 를 사용해보세요.
Group By c# 코드 입니다.
쿼리 스타일과 Function 스타일 두가지 코드 입니다.
Group By 결과를 Tuple에 담아 출력 하는 코드입니다.
나온 결과를 가지고 새로운 DataTable 생성하여 처리하면 원하는 결과 얻을수 있을 것 같네요.
한번 시도해 보세요.
DataTable dt = new DataTable(“table”);
dt.Columns.Add(“col1”, typeof(string));
dt.Columns.Add(“col2”, typeof(string));
dt.Columns.Add(“col3”, typeof(int));
dt.Rows.Add(new object {“123”,“가나다”,7});
dt.Rows.Add(new object {“234”,“나다라”,8});
dt.Rows.Add(new object {“345”,“다라마”,2});
dt.Rows.Add(new object {“123”,“가나다”,1});
foreach(DataRow r in dt.Rows)
{
Console.WriteLine(String.Join(“,”,r.ItemArray));
}
List<ValueTuple<string,int>> group1 = (from r in dt.AsEnumerable()
group r by r.Field(“col1”) into g
select (g.Key,g.Select(d => d.Field(“col3”)).Sum())).ToList();
List<ValueTuple<string,int>> group2 = dt.AsEnumerable()
.GroupBy(r => r.Field(“col1”), r => r.Field(“col3”))
.Select(g => (g.Key, g.Sum())).ToList();
foreach(var t in group2)
{
Console.WriteLine($“{t.Item1} : {t.Item2}”);
}
정말 감사합니다. 찾고있던 예시와 비슷하여 활용할 수 있었습니다
1 Like
상세한 설명 정말 감사합니다
생각외로 해결 방법이 다양했네요 감사합니다!
system
(system)
Closed
September 25, 2020, 11:38am
6
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.