【问题标题】:Convert SQL Query to query in C#将 SQL 查询转换为 C# 中的查询
【发布时间】:2020-12-21 01:20:10
【问题描述】:

我目前得到了下面的 SQL 代码:

 WITH region_list
 AS (SELECT r.StateProvinceRegion, 
            r.CafeId,
            s.Longitude, 
            s.Latitude, 
            ROW_NUMBER() OVER(PARTITION BY r.StateProvinceRegion
            ORDER BY s.Longitude DESC) AS row_no
     FROM CafeAddress r
     inner join Restaurant s on s.CafeId = r.CafeId
 )
 SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS ID,
        StateProvinceRegion, 
        Longitude, 
        Latitude            
 FROM region_list
 WHERE row_no = 1;

我将如何添加此查询?在下面的方法中,我实现了类似的东西,但我不明白如何添加 WITH 子句。

public VersionResponse GetCafeRegion()
{
    var regionList = from cafeAddress in _context.CafeAddress
                     join cafe in _context.Cafe on cafeAddress.CafeId equals cafe.CafeId
                     select new { cafeAddress.StateProvinceRegion, cafeAddress.CafeId, cafe.Longitude, cafe.Latitude };

    return new VersionResponse()
    {
        Data = regionList
    };
}

【问题讨论】:

  • 是实体框架还是 Linq?无论哪种方式添加正确的标签 - 它与 ASP.NET Core 本身无关。
  • 两个帐户?是的,我会删除标签
  • 添加正确的标签...几个小时前您在您的 James 帐户下发布了这个确切的问题...
  • 您要转换的不是 C#,而是 Linq(我认为 - 或 EF)。
  • 这看起来像是一个利用特定 T-SQL 功能的高度优化的查询。 (WITH, ROW_NUMBER() OVER (ORDER BY (SELECT 1)), ...) 我不知道它是否可以转换为产生 exact 相同 SQL...

标签: sql sql-server entity-framework linq


【解决方案1】:

尝试以下代码一次。

public VersionResponse GetCafeRegion()
{
    var CafeAddress = new List<CafeAddress>();
    var Cafe = new List<Cafe>();

    var regionList = from cafeAddress in _context.CafeAddress
                        join cafe in _context.Cafe on cafeAddress.CafeId equals cafe.CafeId
                        group new { cafeAddress.StateProvinceRegion, cafeAddress.CafeId, cafe.Longitude, cafe.Latitude } by cafeAddress.StateProvinceRegion into g
                        select g; 

    List<object> finalResult = new List<object>();
    int index = 1;

    foreach(var gg in regionList)
    {
        var groupRecord = gg.OrderByDescending(x => x.Longitude).FirstOrDefault();

        finalResult.Add(new
        {
            ID = index++,
            groupRecord.StateProvinceRegion,
            groupRecord.CafeId,
            groupRecord.Latitude,
            groupRecord.Longitude
        });
    }

    return new VersionResponse()
    {
        Data = finalResult
    };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 2015-10-10
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多