C# LINQ当前记录和两侧的x个记录数

C# LINQ当前记录和两侧的x个记录数,c#,linq,C#,Linq,我有一个列表,在术语中有Id、StartDate和EndDate 我想使用LINQ对当前术语过滤列表,并返回当前术语两侧的x记录数 本质上,名为GetTerms(cntBefore,cntAfter)的方法需要: 查询术语数据 查找当前术语StartDate如果您在列表中工作,使用索引非常简单: // We suppose data is sorted by StartDate IList<Term> GetNeighborhood(IList<Term> data,

我有一个
列表
,在
术语中有
Id
StartDate
EndDate

我想使用LINQ对当前术语过滤
列表
,并返回当前术语两侧的
x
记录数

本质上,名为
GetTerms(cntBefore,cntAfter)
的方法需要:

  • 查询
    术语
    数据

  • 查找当前术语
    StartDate如果您在列表中工作,使用索引非常简单:

    // We suppose data is sorted by StartDate 
    IList<Term> GetNeighborhood(IList<Term> data, int beforeCount, int afterCount)
    {
        var now = DateTime.Now;
    
        var current = data.Single(d => d.StartDate <= now && now <= d.EndDate);
        var currentIndex = data.IndexOf(current);
    
        var startIndex = Math.Max(0, currentIndex - beforeCount);
        var endIndex = Math.Min(data.Count, currentIndex + afterCount);
        var resultCount = endIndex - startIndex + 1;
    
        return data.Skip(startIndex).Take(resultCount).ToList();
    }
    
    //我们假设数据是按起始日期排序的
    IList GetNeighbory(IList数据,int beforeCount,int afterCount)
    {
    var now=DateTime.now;
    
    var current=data.Single(d=>d.StartDate如果您在列表中工作,那么使用索引非常简单:

    // We suppose data is sorted by StartDate 
    IList<Term> GetNeighborhood(IList<Term> data, int beforeCount, int afterCount)
    {
        var now = DateTime.Now;
    
        var current = data.Single(d => d.StartDate <= now && now <= d.EndDate);
        var currentIndex = data.IndexOf(current);
    
        var startIndex = Math.Max(0, currentIndex - beforeCount);
        var endIndex = Math.Min(data.Count, currentIndex + afterCount);
        var resultCount = endIndex - startIndex + 1;
    
        return data.Skip(startIndex).Take(resultCount).ToList();
    }
    
    //我们假设数据是按起始日期排序的
    IList GetNeighbory(IList数据,int beforeCount,int afterCount)
    {
    var now=DateTime.now;
    
    var current=data.Single(d=>d.StartDate)您是处理对象(
    List
    )还是处理BDD(您将实体框架标记放在这里)?Hi@Orace,我处理对象。不是BDDDo您是处理对象(
    List
    )还是处理BDD(您将实体框架标记放在这里)?嗨@Orace,我在处理对象。不是BDD谢谢你@Orace…我应该想到这个:)谢谢你@Orace…我应该想到这个:)谢谢