假设我正在 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))
;