将SQL查询转换为C中的查询#

将SQL查询转换为C中的查询#,sql,sql-server,entity-framework,linq,Sql,Sql Server,Entity Framework,Linq,我目前已获得以下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 r

我目前已获得以下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
    };
}

请尝试一下下面的代码

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
    };
}
public VersionResponse GetCafeRegion()
{
var cafeadress=新列表();
var Cafe=新列表();
var regionList=来自_context.cafeadress中的cafeadress
加入cafe in_context.cafe on cafeadress.CafeId等于cafe.CafeId
将新的{cafeadress.StateProvinceRegion,cafeadress.CafeId,cafe.Longitude,cafe.Latitude}按cafeadress.StateProvinceRegion分组到g中
选择g;
List finalResult=新列表();
int指数=1;
foreach(区域列表中的var gg)
{
var groupRecord=gg.OrderByDescending(x=>x.Longitude).FirstOrDefault();
最终结果。添加(新)
{
ID=索引+++,
groupRecord.StateProvinceRegion,
groupRecord.CafeId,
团体记录,纬度,
组记录。经度
});
}
返回新版本响应()
{
数据=最终结果
};
}

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