Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / LINQ, группировка по двум полям / 12 сообщений из 12, страница 1 из 1
27.05.2013, 17:51
    #38275297
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
Скажите, пожалуйста, как организовать группировку по двум полям, а не по одному?
Код: c#
1.
2.
3.
4.
5.
var result =
    from OneRow in WholeTable
    group OneRow by OneRow["Первое поле"]
    into ПервоеПолеGroup
    select ПервоеПолеGroup;


Всего десяток полей, сгруппировать надо по "первому" и "второму".
Таблица
Первое поле второе поле третье поле четвертое поле...10ааапривет монитор...10ббб пока клавиатура...10ббб здравствуйте мышь...20ббб до свидания сисблок...10ааа что-тотам провод...20ббб ещечегототам панелька...
После объединения по первому и второму полям:
Первое поле второе поле10ааа10ббб20ббб
как видно, остальные столбцы мне не нужны. Главное получить различные комбинации этих двух.
...
Рейтинг: 0 / 0
27.05.2013, 17:55
    #38275308
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
Charles Weyland,

вариант 1 : объединить их в анонимном классе
2: селектить только 2 поля , потом сделать дистинкт
...
Рейтинг: 0 / 0
27.05.2013, 19:36
    #38275416
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
pationCharles Weyland,

вариант 1 : объединить их в анонимном классе
2: селектить только 2 поля , потом сделать дистинкт
Могу попросить пример кода?..
...
Рейтинг: 0 / 0
28.05.2013, 07:46
    #38275767
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
Charles Weyland,

Код: c#
1.
2.
3.
4.
    var groupResult = WholeTable.Rows.Cast<DataRow>()
                .Select(row => new { FirstField = (string)row["Первое поле"],
                    SecondField = (string)row["Второе поле"] })
                    .Distinct().ToList();



Как то так. SQL синтаксис не очень люблю для C# linq )
...
Рейтинг: 0 / 0
28.05.2013, 09:57
    #38275898
cooldeveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
Код: c#
1.
2.
3.
var qry = cust.GroupBy(cm => 
    new { cm.Customer, cm.OrderDate }, 
    (key, group) => new { Key1 = key.Customer, Key2 = key.OrderDate, Count = group.Count() });
...
Рейтинг: 0 / 0
28.05.2013, 10:52
    #38276018
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
LameUserCharles Weyland,

Код: c#
1.
2.
3.
4.
    var groupResult = WholeTable.Rows.Cast<DataRow>()
                .Select(row => new { FirstField = (string)row["Первое поле"],
                    SecondField = (string)row["Второе поле"] })
                    .Distinct().ToList();




Как то так. SQL синтаксис не очень люблю для C# linq )
Спасибо, доходчиво, хотя, как выясняется, совсем малость не так, как хотелось бы.
В моём варианте я получаю список списков. Т.е. я могу:
Код: c#
1.
2.
3.
4.
5.
6.
Foreach(по элементам сгруппированного списка)
{
   foreach(по элементам внутри группы)
   {
   }
}


А в предложенном варианте дистинктом удаляются все лишние строки.
...
Рейтинг: 0 / 0
28.05.2013, 10:54
    #38276024
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
cooldeveloper
Код: c#
1.
2.
3.
var qry = cust.GroupBy(cm => 
    new { cm.Customer, cm.OrderDate }, 
    (key, group) => new { Key1 = key.Customer, Key2 = key.OrderDate, Count = group.Count() });


Чувствую, что это то, что нужно, только синтаксис пока не дался.. А как это применить к моему примеру?
...
Рейтинг: 0 / 0
28.05.2013, 11:02
    #38276039
cooldeveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
Charles WeylandА как это применить к моему примеру?
Подумай, изучи синтаксис и примени.
...
Рейтинг: 0 / 0
28.05.2013, 11:35
    #38276108
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
ok
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var result = WholeTable.GroupBy(
    row=>
        new
        {
            row["Первое Поле"],   //Неверное определение члена
            row["Второе Поле"]    //анонимного типа
        },
        (key, group) => new
        {
            key1 = key["Первое Поле"], //ошибка: невозможно применить []
            key2 = key["Второе Поле"],  //к выражению типа "анонимный тип"
            Count = group.Count()
        });


Исправляю:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var result = WholeTable.GroupBy(
    row=>
        new
        {
            FirstField,   //не существует в данном контексте
            SecondField    //а оно и логично, я ж не указал, чему они равны... как бы это сделать?
        },
        (key, group) => new
        {
            key1 = key.FirstField,   //ошибки больше нет
            key2 = key.SecondField,
            Count = group.Count()
        });
...
Рейтинг: 0 / 0
28.05.2013, 11:44
    #38276128
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
Сделал так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var result = WholeTable.GroupBy(
    row=>
        new
        {
            FirstField = row["Первое поле"],   //не существует в данном контексте
            SecondField = row["Второе поле"]    //а оно и логично, я ж не указал, чему они равны... как бы это сделать?
        },
        (key, group) => new
        {
            key1 = key.FirstField,   //ошибки больше нет
            key2 = key.SecondField,
            Count = group.Count()
        });

[/quote]
Но, если честно, мне совсем не понятно, почему FirstField и SecondField появились в качестве аргументов у key
...
Рейтинг: 0 / 0
28.05.2013, 11:45
    #38276132
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
я имел в виду, в качестве свойств, (а не "аргументов")
...
Рейтинг: 0 / 0
28.05.2013, 11:52
    #38276145
cooldeveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ, группировка по двум полям
Charles Weyland, научись перед тем, как задавать вопрос, давать тестовый код с наполнением данных. Это не трудно, зато профит будет быстрее и качественнее.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / LINQ, группировка по двум полям / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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