将SQL查询转换为C中的查询#
我目前已获得以下SQL代码:将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
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。。。