EF 6在之前获得两个

时间:2014-09-26 17:03:34

标签: entity-framework entity-framework-6

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

我该怎么做?

2 个答案:

答案 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辆车,你想要的车,以及两辆车后。

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