У меня есть повторяющийся набор данных, которые я извлекаю из нескольких таблиц SQL (длинная история, но все они имеют разные имена, несмотря на то, что у них одинаковые данные) в .NET DataTable: -Динамический LINQ - Борьба с синтаксисом GROUP BY/SELECT
Point_Date -> Point_Value0 -> Point_Value1 -> Point_Value2 -> Point_ValueX
24/11/2014 16:18:07 -> 15.1 -> NULL -> NULL
24/11/2014 16:19:07 -> 15.2 -> NULL -> NULL
24/11/2014 16:20:07 -> 15.3 -> NULL -> NULL
24/11/2014 16:18:07 -> NULL -> 16.1 -> NULL
24/11/2014 16:19:07 -> NULL -> 16.2 -> NULL
24/11/2014 16:20:07 -> NULL -> 16.3 -> NULL
24/11/2014 16:18:07 -> NULL -> NULL -> 17.1
24/11/2014 16:19:07 -> NULL -> NULL -> 17.2
24/11/2014 16:20:07 -> NULL -> NULL -> 17.3
Я хочу, чтобы сгруппировать данные на поле даты/времени с помощью LINQ, так что я в конечном итоге с записями, как: -
24/11/2014 16:18:07 -> 15.1 - > 16.1 -> 17.1
Моя проблема в том, что я не знаю, сколько наборов данных будет (есть три в t он пример, но может быть любое число), поэтому мне нужно использовать динамический LINQ.
Я нормально для запроса LINQ для фиксированного числа полей: -
var dtReport = (from row in dtPoints.AsEnumerable()
group row by row.Field<DateTime>("Point_Date")
into t
select new
{
TempDate = t.Key,
Value1 = (double?) t.Sum(r => r.Field<double?>("Point_Value0") ?? 0),
Value2 = (double?)t.Sum(r => r.Field<double?>("Point_Value1") ?? 0),
Value3 = (double?)t.Sum(r => r.Field<double?>("Point_Value2") ?? 0)
});
Но у меня настоящая борьба делает его динамическим, используя System.Linq.Dynamic следующее дает мне ошибка: -
var myRpt2 = dtPoints.AsEnumerable()
.AsQueryable()
.GroupBy("new (it[\"Point_Date\"] as GrpByCol1)", "it")
.Select("new (it.key as TempDate, it.sum(\"Point_Value0\") as SumValue)");
- существо ошибки: -
System.Linq.Dynami c.ParseException {«Нет применимого метода суммирования» sum «существует»}
Я просто не могу понять, как обращаться к полям «Point_Value» после того, как я сделал GroupBy - будет многократная сумма (Point_ValueX) 'в зависимости от количества наборов данных, но я даже не могу заставить его работать в одном поле на данный момент!
Большое спасибо,
David.
Смотреть видео на LINQ по следующему каналу YouTube: https://www.youtube.com/playlist?list=PL6n9fhu94yhWi8K02Eqxp3Xyh_OmQ0Rp6. Особенно часть 18 и 19 ....... – Vishal
Огромный крик спасибо Vishal, высоко оценил :) – DGjuniordev