@okBuddy

Как ретранслировать данные SQL выражения?

Я написал два таких SQL выражения и при попытке ретранслировать их в LINQ я понял, что в LINQ я немного слабоват
1.
SELECT Project.name, Test.name
FROM Project
JOIN Test ON Test.project_id = Project.id
WHERE(Test.project_id = Project.id) AND (Test.start_time > '2015-11-07 00:00:00')
ORDER BY Project.name, Test.name ASC

2.
SELECT SUM(if(Test.browser = 'chrome', 1, 0)) AS Count
FROM Test
UNION SELECT SUM(if(Test.browser = 'firefox', 1, 0)) AS Count FROM Test

Я пытался написать кое как LINQ к первому запросу, вот что вышло
var query = db.Projects.Join(db.Tests,
                    p => p.Id,
                    t => t.ProjectId,
                    (p, t) => new
                    {
                        Project = p.Name,
                        Test = db.Tests.Where(t => t.ProjectId == p.Id).FirstOrDefault(t => t.StartTime > new DateTime(2015, 11, 7)).Name
                    });

Вышло кратко говоря ничего, потому что FirstOrDefault выводит только 1 запись к каждому проекту, а нужно вывести несколько тестов к каждому проекту, и я не имею понятия как можно вывести через Select имена тестов, так как оно возвращает IQueryable и в Runtime на это бросает исключение
Вот какой запрос формирует LINQ
SELECT `p`.`name` AS `Project`, (
    SELECT `t`.`name`
    FROM `test` AS `t`
    WHERE (`t`.`project_id` = `p`.`id`) AND (`t`.`start_time` > '2015-11-07 00:00:00')
    LIMIT 1) AS `Test`
FROM `project` AS `p`
INNER JOIN `test` AS `t0` ON `p`.`id` = `t0`.`project_id`
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Вы там почкованием размножаетесь? Или это какое-то распространенное задание?
Есть реализация вот такая, например: такой же вопрос
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы