我想从db获取一个项目,以及它之前和之后的项目.
var data= repo .OrderBy(a => a.Date)
.Select((item, index) => new { item, index })
.Where(itemAndIndex=>itemAndIndex.item.Id == someId)
这是我到目前为止所得到的.
澄清,
让我们说这是我的表
Id Name Date
1 SomeText1 01.01.2017
2 SomeText2 03.01.2017
3 SomeText3 02.01.2017
4 SomeText4 04.01.2017
5 SomeText5 05.01.2017
我想对Id == 3进行选择查询,然后按日期字段对结果进行排序,并获取项目列表
Id Name Date
1 SomeText1 01.01.2017
3 SomeText3 02.01.2017
2 SomeText2 03.01.2017
像这样.
谢谢.
最佳答案 这与
Harald Coppoolse’s answer中的想法相同(我认为这是满足您需求的唯一合理方式),但最佳(IMO)LINQ to Entities SQL查询转换(假设repo是IQueryable< T>表示您的表):
var data = repo
.Where(elem => elem.Id == someId)
.SelectMany(elem =>
repo.Where(e => e.Date < elem.Date).OrderByDescending(e => e.Date).Take(1)
.Concat(new[] { elem })
.Concat(repo.Where(e => e.Date > elem.Date).OrderBy(e => e.Date).Take(1)))
.ToList();