【问题标题】:Min Max values using a linq query and select box使用 linq 查询和选择框的最小值最大值
【发布时间】:2019-12-18 18:10:37
【问题描述】:

我目前有一个 linq 查询,允许用户显示他们想要的“carID”。现在我想实现一个查询,使用户能够在“min”和“max”的下拉框中选择最小和最大引擎大小。我不确定如何做到这一点,并会感谢一些建议。谢谢

【问题讨论】:

  • Car 类/表上的“Engine Size”字段/列的类型是什么?如果不是简单的数字/有序枚举或查找表,你会如何对它们进行排序?
  • 您好 Christopher 感谢您的回复,引擎大小是整数类型。我会只做与上面类似的查询但存储最小值和最大值吗?我不清楚如何去做
  • 我可以给你 SQL,我不太擅长 LINQ:Select * FROM TableCar WHERE EngineSize >= Minimum AND EngineSize <= Maximum。从 UI 输入最小值和最大值。如果它已经过去了早期学习,你当然要确保使用参数化查询。
  • 获取最大值是SELECT MAX(EngineSize) FROM TableCar MIN 是 coutner 点。基本标量查询。
  • 感谢您的建议,我将尝试使用该信息实现查询!

标签: c# linq asp.net-core razor-pages


【解决方案1】:

怎么样:

var MaxEngineSize;
var MinEngineSize;

IEnumerable<Car> filteredCars = CarID.Where(x => x.EngineSize >= MinEngineSize && x.EngineSize <= MaxEngineSize)

如果您想像专业人士一样使用 LINQ:

var MaxEngineSize;
var MinEngineSize;
bool EngineFilter(Car c) => c.EngineSize >= MinEngineSize && c.EngineSize <= MaxEngineSize;

var Manifacturer = "Toyota";
bool ManifacturerFiler(Car c) => c.Manifacturer == Manifacturer;


IEnumerable<Car> filteredCars = CarID.Where(EngineFilter)
                                     .Where(ManifacturerFiler);

通过这种方式,您可以堆叠检查以为您正在显示的汽车创建过滤器。

【讨论】:

  • 谢谢你,Alvin,这很有帮助。唯一的问题是我试图让我的查询保持相似,因为这是我最了解它们的方式。无论如何,您是否可以将其“简化”到我的水平,使其类似于上面的查询?再次非常感谢!
  • 当然@Campbell1。您是当前查询,转换为 LINQ 是 var CarQuery = _context.Cars.Where(s =&gt; s.CarID == SearchCarID); 添加最小值/最大值,它将变为 var CarQuery = _context.Cars.Where(s =&gt; s.CarID == SearchCarID).Where(MinMaxFilter)(使用如上所示的 lambda)。您会看到这只是视角问题,两个查询变得非常相似,只是一个附加条件。
  • Great Alvin 更有意义,您能否将其放入我的项目中,以便它像我刚刚尝试过的那样工作,但无法掌握将查询放在哪里工作?例如,您能否以我上面的示例并输入您的查询以便它运行?
  • 您的代码修改起来有点棘手,因为缺少很多信息。考虑创建包含过滤算法的更简单的单一职责视图模型。我在这里写了一个例子:pastebin.com/DtNjk4vv希望对你有帮助。
  • 我会写一个新问题并将它与我联系起来,非常感谢您的帮助!
猜你喜欢
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多