EF 6 在之前两个之后得到两个



假设我正在 DbContext.Cars where x=> x.Id = 1 中执行搜索。我想这样做,然后在之前抓住两个Cars和两个Cars

我该怎么做?

Linq只是使用你告诉它的逻辑。 所以你只是改变逻辑。

DbContext.Cars.Where(car => car.ID>=1 && car。ID <= 5(;

前一个得到所有汽车 = 3,加上汽车 1 和 2,以及 4 和 5。 所以你也可以这样写:

var carNum = 3;
DbContext.Cars.Where(car => car.Id >= carNum-2 && car.Id <= carNum + 2);

这当然假设汽车按数字顺序排序,您可以在查询中执行此操作。 并且没有丢失的id。 您也可以这样做:

DbContext.Cars.Where(/*logic to find first record, subtracting 2*/).Take(5);

在上面,你找出一些逻辑来找出你的第一辆车是什么,然后弄清楚 -2 是什么,然后你拿 5 辆车,得到前 2

辆车,你想要的车,后面的两辆车。

由于您没有提供足够的信息来确定您的数据模型如何工作,这确实是我们能做的最好的事情,就是为您提供信息以帮助您自己弄清楚逻辑。

如果您确定 Id 是整数,则可以执行以下操作:

DbContext.Cars.Where(car => Math.Abs(1 - car.Id) <= 2);

如果您的 id 序列有间隙,并且您希望确保始终获得 2 辆 Id 最接近且小于您指定值的汽车,您可以执行以下操作:

var carNum = 6;
DbContext.Cars
    .Where(car => car.Id < carNum)
    .OrderByDescending(car => car.Id)
    .Take(2)
    .Union(DbContext.Cars
        .Where(car => car.Id > carNum)
        .OrderBy(car => car.Id)
        .Take(2)
    )
    // If you'd like to also get the car with Id == carNum, uncomment the following
    // .Union(DbContext.Cars.Where(car => car.Id == carNum))
    ;

相关内容

  • 没有找到相关文章

最新更新