假设我正在DbContext.Cars where x=> x.Id = 1
执行搜索。我想这样做,然后在之前抓两个Cars
,之前抓两个Cars
。
我该怎么做?
答案 0 :(得分:0)
如果您确定Id是整数,则可以执行以下操作:
DbContext.Cars.Where(car => Math.Abs(1 - car.Id) <= 2);
如果您的ID序列有间隙,并且您希望确保始终获得最接近Ids大于且小于指定值的2辆车,则可以执行以下操作:
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))
;
答案 1 :(得分:0)
Linq正在使用你告诉它的逻辑。所以你只需改变逻辑。
DbContext.Cars.Where(car =&gt; car.Id&gt; = 1&amp;&amp; car.Id&lt; = 5);
之前获得的所有汽车= 3,加上汽车1和2,以及4和5.所以你也可以写下:
var carNum = 3;
DbContext.Cars.Where(car => car.Id >= carNum-2 && car.Id <= carNum + 2);
这当然假设汽车按数字顺序排序,您可以在查询中执行此操作。而且没有遗漏的身份证。你也可以这样做:
DbContext.Cars.Where(/*logic to find first record, subtracting 2*/).Take(5);
在上面,你找出一些逻辑来找出你的第一辆车是什么,然后弄清楚是什么车-2,然后你需要5辆车,这是前2辆车,你想要的车,以及两辆车后。
由于您没有提供足够的信息来确定数据模型的工作方式,因此这是我们能做的最好的事情,为您提供信息以帮助您自己弄清楚逻辑。