내가이 형식의 DataTable에있어 말을 부모 롤업으로, 그룹에 합류 내가하고 싶은 것을LINQ는
id | data
10 | 5500
20 | -3000
30 | 500
첫 번째의 net "data1"에 두 번째 테이블의 "data"필드가 추가되고 "id2"수준에서 데이터가 집계됩니다. 나는 이것을 어떻게하는지 알아 냈다. 그러나 내가 갇혀있는 것은 이것이다 : 나는 "parentID"를 가진 것을위한 데이터를 원한다! = -1이 그것의 부모에 추가된다. 위의 데이터의 출력은
id | data1 | data2
10 | 2927.6 | 26.2
30 | 621.5 | 210.3
이 있어야 효율적인 방법 일 수 있습니까?
편집 : 코드 샘플 재귀에 잘 적합하지 불행하게도, (확장자로하고, LINQ) SQL은
DataTable dt1 = new DataTable();
dt1.Columns.Add("id", typeof(int));
dt1.Columns.Add("key1", typeof(string));
dt1.Columns.Add("key2", typeof(string));
dt1.Columns.Add("data1", typeof(double));
dt1.Columns.Add("data2", typeof(double));
dt1.Columns.Add("parentID", typeof(int));
DataTable dt2 = new DataTable();
dt2.Columns.Add("id", typeof(int));
dt2.Columns.Add("data", typeof(double));
dt1.Rows.Add(new object[] { 10, "AA", "one", 10.3, 0.3, -1 });
dt1.Rows.Add(new object[] { 10, "AA", "two", 20.1, 16.2, -1 });
dt1.Rows.Add(new object[] { 10, "BB", "one", -5.9, 30.1, -1 });
dt1.Rows.Add(new object[] { 20, "AA", "one", 403.1, -20.4, 10 });
dt1.Rows.Add(new object[] { 30, "AA", "one", 121.5, 210.3, -1 });
dt2.Rows.Add(new object[] { 10, 5500 });
dt2.Rows.Add(new object[] { 20, -3000 });
dt2.Rows.Add(new object[] { 30, 500 });
var groups = dt1.AsEnumerable()
.GroupBy(e => e["id"])
.Select(e => new
{
id = e.Key,
net_data1 = e.Sum(w => (double)w["data1"]),
net_data2 = e.Sum(w => (double)w["data2"])
})
.GroupJoin(dt2.AsEnumerable(), e1 => e1.id, e2 => e2["id"],
(a1, a2) => new
{
id = a1.id,
net_data1 = a1.net_data1 + a2.Sum(w => (double)w["data"]),
net_data2 = a1.net_data2
});
왜 당신이이 경우에 그냥 한 단계, 당신이 이미 가지고 코드 ... –