gpt4 book ai didi

c# - SQL select where但只检查参数是否为真

转载 作者:太空宇宙 更新时间:2023-11-03 21:31:13 26 4
gpt4 key购买 nike

我想使用 Select 语句从我的 sql 数据库中选择一些变量,以根据某些参数检查每个元素,例如:

  public ActionResult Filter_Rooms(bool pFilter, int pCapacity, bool pBeamer, bool pNote, bool pTelevision, bool pTel, bool pWifi)
{
using (var sampleDB = db)
{
if (pFilter)
{
var maxCap = pCapacity + 20;
IQueryable<RoomViewModel> rooms = sampleDB.Spaces
.ToList()
.Where(r => (r.roomCapacity >= pCapacity
&& r.roomCapacity <= maxCap)
&& r.roomBeamer == pBeamer
&& r.roomCapacity == pCapacity
&& r.roomTelevision == pTelevision)
.ToList()
.Select(room => new RoomViewModel()

除了 pCapacity 之外,不同的参数都是 bool 值。

使用这些参数,我正在检查我的数据库(= 一个房间)的哪个记录具有给定的参数(= 设备)。但是这里只有 bool 值为 true 的参数才重要。 bool 值为 false 的参数实际上是透明的,因为这些房间不必有这个参数,但如果他们有也没关系......

现在我正在检查具有真实参数但没有错误参数但错误参数应该被忽略的房间。

例如:pBeamer = true,pNote = true,pTelevision = true,pTelephone = true 但 pWifi = false 所以房间有投影仪、便条、电视、电话和没有 wifi 是可以的,但有投影仪的房间,请注意,电视、电话和 wifi 也可以!

现在我无法相信我必须检查每个 bool 值才能组成 select 语句,那么是否有一些解决方案可以快速轻松地完成这项工作?

最佳答案

您应该利用 LINQ 是惰性的这一事实,并且在枚举结果之前不会执行查询。像您这样的问题有一种模式:

var maxCap = pCapacity + 20;
var query = sampleDB.Spaces
.Where(r => r.roomCapacity >= pCapacity && r.roomCapacity <= maxCap);

if(pBeamer)
query = query.Where(r => r.roomBeamer);
if(pCapacity)
query = query.Where(r => r.roomCapacity);
// ...

var rooms = query.Select(r => new RoomViewModel() //...);

附言。在 db.Spaces 上调用 ToList() 直接将整个表带入应用程序内存,并使所有过滤作为 LINQ to Objects 查询发生。这绝对不是您想发生的事情...

关于c# - SQL select where但只检查参数是否为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com