Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите понять LINQ / 8 сообщений из 8, страница 1 из 1
20.12.2016, 12:32
    #39370912
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять LINQ
Помогите люди добрые, пытаюсь на LINQ изобразить следующее:
есть DataTable, хочу получить другой DataTable, на SQL это выглядело бы до безобразия просто:
Код: sql
1.
select VKD, SD, KM, sum(NR), KEI from DT group by VKD, SD, KM, KEI


Читая примеры использования sum() в LINQ уже голову сломал - как написать group, что написать в into и select?

В принципе в DataTable не упираюсь, могу переделать и в List(Of Type).
...
Рейтинг: 0 / 0
20.12.2016, 12:46
    #39370933
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять LINQ
Barkan,

Код: c#
1.
2.
3.
4.
query
  .GroupBy(p => new { p.VKD, p.SD, p.KM, p.KEY })
  .Select(p => new { p.Key, Sum = p.Sum(a => a.NR) })
  .ToList();
...
Рейтинг: 0 / 0
20.12.2016, 13:43
    #39371002
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять LINQ
В результате плясок с бубном получилось следующее:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim groupDT = From M In _DT.AsEnumerable() _
                    Group M By VKD = M.Field(Of String)("VKD"), SC = M.Field(Of String)("SC"), KM = M.Field(Of String)("KM"), KEI = M.Field(Of String)("KEI") _
                    Into g = Group _
                    Select New With { .VKD = VKD, .SC = SC, .KM = KM, _
                    .NR = g.sum(Function(M) M.Field(Of Double)("NR")), _
                    .KEI = KEI }
For Each M In groupDT
   Debug.Print("M.VKD = {0},  M.NR = {1}", M.VKD, M.NR)
Next



И ЭТО работает, но без бутылки не разобраться. Пошёл за жидкостью для просветления Ж:)
...
Рейтинг: 0 / 0
21.12.2016, 14:08
    #39371944
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять LINQ
Barkan,

авторхочу получить другой DataTableи где вы получили в конце DT?
...
Рейтинг: 0 / 0
21.12.2016, 14:45
    #39371989
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять LINQ
Barkan,

LINQ на VB.NET это адище...
...
Рейтинг: 0 / 0
22.12.2016, 08:28
    #39372539
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять LINQ
Roman Mejtes,

DT не получил - но это не проблема.
Проблема - понять и принять такой адский синтаксис LINQ.
...
Рейтинг: 0 / 0
22.12.2016, 08:42
    #39372545
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять LINQ
BarkanRoman Mejtes,

DT не получил - но это не проблема.
Проблема - понять и принять такой адский синтаксис LINQ.Тебе hVostt уже дал нормальный пример. Вот альтернативный синтаксис:
Код: c#
1.
2.
3.
4.
var q =
    from dt in Db.DT
    group dt by new { dt.VKD, dt.SD, dt.KM, dt.KEI } into g
    select new { Key = g.Key, Sum = g.Sum(v => v.NR) };


Что ещё не так?
...
Рейтинг: 0 / 0
28.01.2017, 22:56
    #39393885
ntkrnlmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять LINQ
Barkan,

Он не адский:)

LINQ запросы разворачивается в цепочки функций вида:
Код: c#
1.
Enumerable.Select(Enumerable.GroupBy(Enumerable.Where(...)))



Т.е. перед тем, как сделать проекцию (Select) выполняется группировка (GroupBy), а перед группировкой - фильтрация (Where). И эта цепочка повторяется для каждого элемента.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите понять LINQ / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]