我有一个sql查询,它返回给定ID的周围行。因此,假设我要为给定的MediaID为8000找到3行。(上一行,当前行,下一行)。
我甚至不确定这是否是实现这些结果的最佳方式,但无论如何这是我的查询:
SELECT * FROM (
SELECT TOP 1 * FROM Media WHERE MediaTypeID = 1 and MediaID < 8000 order by MediaID DESC
UNION
SELECT * FROM Media WHERE MediaID = 8000
UNION
SELECT TOP 1 * FROM Media WHERE MediaTypeID = 1 and MediaID > 8000
) AS TBL
ORDER BY TBL.MediaID
我将此查询导入C#Web应用程序,并希望将查询转换为LINQ格式。我有点挣扎。我想我很接近。
这是我的LINQ代码:
//Get Prev record, current record, next record
var Results = (from m in DB.Media where m.MediaTypeID == 1 && m.MediaID < 8000 orderby m.MediaID descending select m).Take(1).Union(
from m in DB.Media where m.MediaID == 8000 select m).Union(
from m in DB.Media where m.MediaTypeID == 1 && m.MediaID > 8000 select m).Take(1);
感谢您的帮助。
答案 0 :(得分:2)
看起来非常接近。我认为你的“联合”最终语句周围需要一组额外的括号(因此Take(1)
仅适用于最后一个语句而不是整个联合LINQ语句)和最后一个{{ 1}}:
OrderBy
为了清楚起见,请考虑将其拆分为单独的行:
var Results = (from m in DB.Media
where m.MediaTypeID == 1
&& m.MediaID < 8000
orderby m.MediaID descending select m).Take(1)
.Union(
from m in DB.Media
where m.MediaID == 8000
select m)
.Union(
(from m in DB.Media
where m.MediaTypeID == 1
&& m.MediaID > 8000
select m).Take(1))
.OrderBy(m => m.MediaID);