powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите понять LINQ
8 сообщений из 8, страница 1 из 1
Помогите понять LINQ
    #39370912
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите люди добрые, пытаюсь на 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
Помогите понять LINQ
    #39370933
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите понять LINQ
    #39371002
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В результате плясок с бубном получилось следующее:

Код: 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
Помогите понять LINQ
    #39371944
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barkan,

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

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

DT не получил - но это не проблема.
Проблема - понять и принять такой адский синтаксис LINQ.
...
Рейтинг: 0 / 0
Помогите понять LINQ
    #39372545
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите понять LINQ
    #39393885
ntkrnlmp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barkan,

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

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



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


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