微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 实体框架,获取所选项目的周围项目

我想从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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐