powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / LINQ и group
17 сообщений из 17, страница 1 из 1
LINQ и group
    #38277293
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Вопрос прост, но я только приступил к изучению LINQ. Что то не пойму как с group by работать.
Подскажите плиз

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};

            var QW = from ii in mg
                     where ii > 1
                     group mg by ii;
                     //select new ii;

            foreach(var per in QW)
            {
                MessageBox.Show("Переменная равна = :" + per.ToString());
            }



на SQL синтаксисе это будет как то так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  with t as (select 1 as col1 from SYSIBM.SYSDUMMY1 
           union all 
           select 2 from SYSIBM.SYSDUMMY1
           union all 
           select 3 from SYSIBM.SYSDUMMY1
           union all 
           select 4 from SYSIBM.SYSDUMMY1
           union all 
           select 2 from SYSIBM.SYSDUMMY1
           union all 
           select 5 from SYSIBM.SYSDUMMY1
           )
           select col1 from t group by col1;     



Выдается какая то системная ересь. Как правильно вывести resultset?
Спасибо!
...
Рейтинг: 0 / 0
LINQ и group
    #38277315
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как группировать, я писал здесь, прямо в вопросе, буквально вчера (поиск!)
http://www.sql.ru/forum/1025519/linq-gruppirovka-po-dvum-polyam

а считывать в твоём случае так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
//по группам
for (var qw in QW)
{
   //внутри каждой группы
   for(var q in qw)
   {
   }
}
...
Рейтинг: 0 / 0
LINQ и group
    #38277321
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weylandкак группировать, я писал здесь, прямо в вопросе, буквально вчера (поиск!)
http://www.sql.ru/forum/1025519/linq-gruppirovka-po-dvum-polyam

а считывать в твоём случае так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
//по группам
for (var qw in QW)
{
   //внутри каждой группы
   for(var q in qw)
   {
   }
}



Дык я твой пост видел, но у тебя группировка по 2-м полям. А у меня вроде по одному...
...
Рейтинг: 0 / 0
LINQ и group
    #38277328
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medoedCharles Weylandкак группировать, я писал здесь, прямо в вопросе, буквально вчера (поиск!)
http://www.sql.ru/forum/1025519/linq-gruppirovka-po-dvum-polyam

а считывать в твоём случае так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
//по группам
for (var qw in QW)
{
   //внутри каждой группы
   for(var q in qw)
   {
   }
}




Дык я твой пост видел, но у тебя группировка по 2-м полям. А у меня вроде по одному...
эм.. ну.. в вопросе у меня содержится запрос с группировкой и он корректен.
...
Рейтинг: 0 / 0
LINQ и group
    #38277345
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weylandэм.. ну.. в вопросе у меня содержится запрос с группировкой и он корректен.

Дык я переделал свой запрос, но что то не помогает:

var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};
var QW = from ii in mg
where ii > 1
group mg by ii into res
select res;

foreach(var per in QW)
{
MessageBox.Show("Переменная равна = :" + per.ToString());
}
...
Рейтинг: 0 / 0
LINQ и group
    #38277362
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medoedCharles Weylandэм.. ну.. в вопросе у меня содержится запрос с группировкой и он корректен.

Дык я переделал свой запрос, но что то не помогает:

var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};
var QW = from ii in mg
where ii > 1
group mg by ii into res
select res;

foreach(var per in QW)
{
MessageBox.Show("Переменная равна = :" + per.ToString());
}
per - это группа, для того, чтобы углубиться во внутрь этой группы и добраться до сгруппированных чисел, нужен второй for.
Также ты можешь использовать distinct(), или, логичнее в твоём случае, First или Last
...
Рейтинг: 0 / 0
LINQ и group
    #38277967
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weylandmedoedпропущено...


Дык я переделал свой запрос, но что то не помогает:

var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};
var QW = from ii in mg
where ii > 1
group mg by ii into res
select res;

foreach(var per in QW)
{
MessageBox.Show("Переменная равна = :" + per.ToString());
}
per - это группа, для того, чтобы углубиться во внутрь этой группы и добраться до сгруппированных чисел, нужен второй for.
Также ты можешь использовать distinct(), или, логичнее в твоём случае, First или Last

Переписал вот так, как вы советовали цифры стали выводиться, но почему то группировки нет...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};
            var QW = from ii in mg
                     where ii > 1
                     group mg by ii into res
                     select mg;

            foreach(var per in QW)
            {
                foreach (var per_int in per)
                {
                    MessageBox.Show("Переменная равна = :" + per_int.ToString());
                }
            }
...
Рейтинг: 0 / 0
LINQ и group
    #38278040
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};
            var QW = from ii in mg
                     where ii > 1
                     group mg by ii into res
                     select mg;

            foreach(var per in QW)
            {
                foreach (var per_int in per)
                {
                    MessageBox.Show("Переменная равна = :" + per_int.ToString());
		break; //Дописал
                }
            }


ну, самый топорный способ в данном случае - дописать break (дописал), и это будет работать.
Но в мало-мальски приличном обществе за наличие break ругать будут.
Но лучше вместо этого использовать
per.First() -взять первый элемент из списка
или

per.Last() - взять последний элемент из списка
разберись, как
...
Рейтинг: 0 / 0
LINQ и group
    #38278047
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, и ещё, вместо
Код: c#
1.
MessageBox.Show("ох и ах");


используй
Код: c#
1.
Console.WriteLine("ох и ах");


и смотри результаты на панели "Вывод" (Output)
...
Рейтинг: 0 / 0
LINQ и group
    #38278060
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};
            var QW = from ii in mg
                     where ii > 1
                     group mg by ii into res
                     select mg;

            foreach(var per in QW)
            {
                foreach (var per_int in per)
                {
                    MessageBox.Show("Переменная равна = :" + per_int.ToString());
		break; //Дописал
                }
            }


ну, самый топорный способ в данном случае - дописать break (дописал), и это будет работать.
Но в мало-мальски приличном обществе за наличие break ругать будут.
Но лучше вместо этого использовать
per.First() -взять первый элемент из списка
или

per.Last() - взять последний элемент из списка
разберись, как


Не работает - Выводится все время 1 (первый элемент).
Расскажите, как хотя бы с этот запрос будет выглядеть?
...
Рейтинг: 0 / 0
LINQ и group
    #38278075
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medoed,

Я имел в виду запрос с distinct
...
Рейтинг: 0 / 0
LINQ и group
    #38278103
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medoed,
Вроде получилось:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};
            int i;
            var QW = from ii in mg
                     where ii > 1
                     group ii by ii into res
                     select res;
                     
            foreach(var per in QW)
            {
                foreach (var per_int in per.Distinct())
                {
                    MessageBox.Show("Переменная равна = :" + per_int.ToString());
                }
            }



P.S. Извратно по первости кажется синтаксис Linq - а, по сравнению с T-sql; Pl-sql и т.д..
...
Рейтинг: 0 / 0
LINQ и group
    #38278240
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medoedmedoed,
Вроде получилось:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var mg = new [] { 1, 2, 3, 4, 5, 6, 7,2,4};
            int i;
            var QW = from ii in mg
                     where ii > 1
                     group ii by ii into res
                     select res;
                     
            foreach(var per in QW)
            {
                foreach (var per_int in per.Distinct())
                {
                    MessageBox.Show("Переменная равна = :" + per_int.ToString());
                }
            }



P.S. Извратно по первости кажется синтаксис Linq - а, по сравнению с T-sql; Pl-sql и т.д..

Вы либо пишите всю задачу, либо корректней ставьте условие.
В вашем случае группировка не нужна.

сделал бы так:

Код: c#
1.
2.
var result = mg.Where(element => element > 1).Distinct();
result.ToList().ForEach(element => MessageBox.Show("Переменная равна = :" + element));
...
Рейтинг: 0 / 0
LINQ и group
    #38278252
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если по неизвестной мне причине необходимо все-таки оставить группипорвку - вывод ключей без вложенного цикла:

Код: c#
1.
2.
3.
4.
      foreach (var per in QW)
            {
                MessageBox.Show("Переменная равна = :" + per.Key);
            }
...
Рейтинг: 0 / 0
LINQ и group
    #38278334
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUserЕсли по неизвестной мне причине необходимо все-таки оставить группипорвку - вывод ключей без вложенного цикла:

Код: c#
1.
2.
3.
4.
      foreach (var per in QW)
            {
                MessageBox.Show("Переменная равна = :" + per.Key);
            }


Да задача проста - освоить основы LINQ, в частности группировку, поле одно - вывести уникальные значения и усё

На SQL это вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
 /*create table temp.testt (id integer);*/

 select id  
 from temp.testt
 where id >1 
 group by id
 order by id



А ваш вариант без цикла не работает (см картинку):
...
Рейтинг: 0 / 0
LINQ и group
    #38278603
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medoed,
Странно, должно работать.

Под какой фреймворк собираете?
...
Рейтинг: 0 / 0
LINQ и group
    #38278637
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUsermedoed,
Странно, должно работать.
Под какой фреймворк собираете?

Все разобрался у меня было
Код: c#
1.
select res.Distinct()

, поставил
Код: c#
1.
select res

и все стало ок!
Спасибо!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / LINQ и group
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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