簡體   English   中英

如何在 .NET Core (C#) 中將此 SQL 查詢編寫為 LINQ 語句?

[英]How to write this SQL query as a LINQ statement in .NET Core (C#)?

我正在嘗試將三個表連接在一起,但我無法通過 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 中不容易完成。 否則這也是一個選擇。

我認為您正在尋找 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)};

如果您確實需要沿着原始 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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM