LINQ vb.net GROUP BY - выбрать столбец - PullRequest
1 голос
/ 18 октября 2011

У меня есть очень простой SQL-запрос, который я пытаюсь воспроизвести:

     SELECT t1.id, t1.name, count(*), min(t2.inserted) as inserted_first,        max(t2.inserted) as inserted_last
     FROM tbl1 t1 
     LEFT JOIN tbl2 t2 ON t1.id=t2.tbl1_id
     WHERE t2.search=15
     GROUP BY t1.id, t1.name

Это прекрасно работает для меня.Это позволяет мне группировать по уникальным элементам t1.id и t1.name, но также получать количество раз, когда эта пара появляется, а также минимальное и максимальное значение t2.inserted для связанной таблицы.Проблема в том, что теперь, когда я превращаю это в LINQ, я получаю:

    Dim query =
    From t1 In ent.TBL1
    Join t2 In ent.TBL2 On t1.id Equals t2.tbl1_id
    Where (t2.search=15)
    Group t1 By t1.id, t1.name Into Group
    Select New With {
     .id = id,
     .name = name,
     .count = Group.Count,
     .min_value = ???,
     .max_Value = ???
    }

Я теряюсь в том, что я могу сделать, чтобы выбрать мин и макс.Group.Min будет работать, если он будет из той же таблицы, что и группа, однако, поскольку он находится в t2, я не могу ссылаться на него.Также я не могу добавить его в свою группу, так как он отличается.

Обратите внимание, что tbl2 ссылается на tbl1 на tbl2.tbl1_id -> tbl1.id.Также это дурацкий пример моей проблемы, а не настоящая живая схема.

Я ценю любую помощь по этому вопросу

1 Ответ

1 голос
/ 18 октября 2011

Я не VB человек, но я думаю вы хотите:

Group t1, t2 By t1.id, t1.name Into Group
Select New With {
 .id = id,
 .name = name,
 .count = Group.Count,
 .min_value = Group.Min(Function(x) x.t2.Inserted),
 .max_Value = Group.Max(Function(x) x.t2.Inserted)
}

Обратите внимание, что здесь каждый элемент группы содержит как t1, так и t2, чтокак вы можете добраться до свойства Inserted.На самом деле неясно, нужен ли вам t1 или какой-либо другой элемент t2, поэтому вы можете использовать:

Group t2.Inserted By t1.id, t1.name Into Group
Select New With {
 .id = id,
 .name = name,
 .count = Group.Count,
 .min_value = Group.Min(),
 .max_Value = Group.Max()
}

К сожалению, мои навыки VB LINQ не верныне зная, подходит ли это тебе.Если бы вы были довольны этим в C # (который вы могли бы затем преобразовать), я мог бы помочь вам легче ...

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