Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 LINQ задачка  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
string[] fruits = { "apple", "banana", "mango", "orange", 
                      "passionfruit", "grape" };

var query =
    fruits.Select((fruit, index) =>
                      new { index,  fruit})
;

Вот допустим, есть такая задачка.
пронумировали фрукты.
А как теперь можно сделать так, чтоб содержало:
автор
"1,2", "apple, banana"
"3,4", "mango, orange"
"5,6", "passionfruit, grape"

???
---------------------------------------------------------
SET @@verSION = 'Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6002: Service Pack 2) '
11 дек 11, 13:06    [11744345]     Ответить | Цитировать Сообщить модератору
 Re: LINQ задачка  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
Просто вчера от нечего делать Линкьил, и придумал себе простую задачку. Задачка оказалась не простой.
Долго протупил над Aggregate, и над списком методов IEnumerable
11 дек 11, 13:07    [11744349]     Ответить | Цитировать Сообщить модератору
 Re: LINQ задачка  [new]
Коляныч
Member

Откуда:
Сообщений: 279
Erik_Kartmann,

мож я что-то не понял, но вроде бы просто сгруппировать нужно по остатку от деления на два

            var another = from x in query
                          group x by x.index / 2 into groupped
                          select new
                          {
                              nums = groupped.Select(x => x.index + 1),
                              fruits = groupped.Select(x => x.fruit)
                          };
11 дек 11, 20:07    [11745510]     Ответить | Цитировать Сообщить модератору
 Re: LINQ задачка  [new]
Коляныч
Member

Откуда:
Сообщений: 279
То есть просто по делению на два и округлению вниз, в смысле не по остатку
11 дек 11, 22:00    [11745943]     Ответить | Цитировать Сообщить модератору
 Re: LINQ задачка  [new]
Коляныч
Member

Откуда:
Сообщений: 279
Ну или если их именно в строчку надо слепить через запятые, то


            var concat = from a in another
                         select new
                         {
                             indexes = a.nums.Aggregate("", (acc, x) => acc + (acc == "" ? "" : ",") + x),
                             fruits = a.fruits.Aggregate("", (acc, x) => acc + (acc == "" ? "" : ",") + x)
                         };
11 дек 11, 22:11    [11745966]     Ответить | Цитировать Сообщить модератору
 Re: LINQ задачка  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
var query = fruits.Select((fruit, index) => new { ind = index - index % 2, index, fruit }).GroupBy(d => d.ind);


P.S. Разложить в строчку можно через аггрегат, как уже сказали.
12 дек 11, 08:55    [11746880]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить