Как мне написать запрос LINQ, чтобы объединить несколько строк в одну строку? - PullRequest
1 голос
/ 24 февраля 2012

У меня есть одна таблица, 'a', с идентификатором и отметкой времени. Другая таблица, 'b', имеет N нескольких строк, ссылающихся на id, и каждая строка имеет 'type' и «некоторые другие данные».

Я хочу, чтобы запрос LINQ выдал единственную строку с идентификатором, отметкой времени и «некоторыми другими данными» x N. Например,


    1 | 4671 | 46.5 | 56.5

, где 46,5 из одного ряда 'b' и 56,5 из другого ряда; оба с одинаковым идентификатором.

У меня есть рабочий запрос в SQLite, но я новичок в LINQ. Я не знаю с чего начать - я вообще не думаю, что это JOIN.


    SELECT 
       a.id as id,
       a.seconds,
       COALESCE(
         (SELECT b.some_data FROM
           b WHERE
             b.id=a.id AND b.type=1), '') AS 'data_one',
       COALESCE(
         (SELECT b.some_data FROM
           b WHERE
             b.id=a.id AND b.type=2), '') AS 'data_two'

       FROM a first
       WHERE first.id=1
       GROUP BY first.ID

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

вы не упомянули, используете ли вы Linq для sql или linq для сущностей.Однако следующий запрос должен получить вас там

(from x in a
join y in b on x.id equals y.id
select new{x.id, x.seconds, y.some_data, y.type}).GroupBy(x=>new{x.id,x.seconds}).
Select(x=>new{
    id = x.key.id,
    seconds = x.Key.seconds,
    data_one = x.Where(z=>z.type == 1).Select(g=>g.some_data).FirstOrDefault(),
    data_two = x.Where(z=>z.type == 2).Select(g=>g.some_data).FirstOrDefault()
});

Очевидно, вы должны префиксировать имена таблиц с помощью datacontext или Objectcontext в зависимости от основного поставщика.

0 голосов
/ 24 февраля 2012

То, что вы хотите сделать, аналогично повороту, см. Можно ли сводить данные с помощью LINQ? . Разница здесь в том, что вам на самом деле не нужно агрегировать (например, стандартную сводную диаграмму), поэтому вам нужно будет использовать Max или какой-либо подобный метод, который может имитировать выбор одного поля varchar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...