Как записать этот SQL запрос как оператор LINQ в. NET Core (C#)? - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь объединить три таблицы вместе, но я просто не могу получить свои операторы LINQ, чтобы получить данные, которые я хочу. Мой SQL запрос, который я хочу повторить, выглядит следующим образом:

SELECT TOP 5 SUM(Grade) AS 'TotalGrade', COUNT(Restaurants.Name) AS 'NumberOfVisits', Restaurants.Name FROM Lunches
  JOIN dbo.LunchRestaurant ON Lunches.LunchId = LunchRestaurant.LunchId
  JOIN Restaurants ON Restaurants.RestaurantId = LunchRestaurant.RestaurantId
  GROUP BY Restaurants.Name

У меня есть LINQ-оператор:

    var q = from l in lunchContext.Lunches
            join lr in lunchContext.LunchRestaurant on l.LunchId equals lr.LunchId
            join r in lunchContext.Restaurants on lr.RestaurantId equals r.RestaurantId
            select new { l.Grade, r.RestaurantId};

Но с этим я не могу получить в моей группе оператором или агрегатными функциями, как бы я ни пытался. Есть ли у вас какие-либо предложения о том, что делать? Также, похоже, нет способа написать необработанные операторы SQL при работе с несколькими таблицами, по крайней мере, нелегко сделать в EF Core, если я не ошибаюсь. В противном случае это тоже будет вариант.

1 Ответ

1 голос
/ 29 марта 2020

Я думаю, вы ищете группу linq. По памяти это будет что-то вроде:

          var q = from l in lunchContext.Lunches
        join lr in lunchContext.LunchRestaurant on l.LunchId equals lr.LunchId
        join r in lunchContext.Restaurants on lr.RestaurantId equals r.RestaurantId
        group l by lr.RestaurantId into g
        select new { Id = g.Key,  Grade =g.Sum(x=>x.Grade)};

Если вам нужно go по сырому маршруту SQL, то вы можете левередировать ADO. Net вот так

using (var command = lunchContext.Database.GetDbConnection().CreateCommand())
{
    command.CommandText = "{Your sql query here}";
    context.Database.OpenConnection();
    using (var result = command.ExecuteReader())
    {
        // do something with result
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...