【问题标题】:How do you query for a block inside of search results?您如何查询搜索结果中的块?
【发布时间】:2019-12-02 21:43:40
【问题描述】:

假设你有这张桌子:

var query = db.Cars.OrderBy(u => u.Name);

ID      Name
17      Accord
772     Civic
36      F-150
2237    Model 3
425     Sienna

如果像这样按名称排序,您将如何获取 ID=772 之后的两行?这些是期望的结果:

ID      Name
36      F-150
2237    Model 3
425     Sienna

【问题讨论】:

  • [425, Sienna] 也在 ID=772 之后。为什么它不在您的结果中?

标签: c# .net linq linq-to-sql


【解决方案1】:

看看SkipWhile方法

var query = db.Cars.OrderBy(u => u.Name)
    .SkipWhile(u => u.Id != 772)
    .Skip(1)
    .Take(2);

【讨论】:

  • 唉,SkipWhile 仅支持可枚举,不支持查询
【解决方案2】:

如果您的要求是:

给我所有名称字母顺序高于“Civic”的汽车

(或高于某个输入变量)

return db.Cars.Where(car.Name > "Civic")
              .OrderBy(car.Name);

显然,您有一个非常不寻常的要求。

给定一些输入汽车 ID (772),给我所有汽车名称的字母顺序高于具有此 ID 的汽车的名称。

因为访问的是数据库,所以不能使用 SkipWhile,IQueryable 不支持。

string nameOfCar772 = db.Cars.Where(car => car.Id == 772)
                             .Select(car => car.Name)
                             .FirstOrDefault();
// TODO: handle if there is no car with id 772, so if car772 == null
return db.Cars.Where(car => car.Name > nameOfCar772)
                               .OrderBy(car => car.Name);

唉,这需要两次数据库访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 2014-11-25
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多