我正在尝试使用以下逻辑在Linq to SQL中创建where子句
如果@supplierid为null则返回所有记录。
如果@supplierid不为null返回,其中supplierid等于@supplierid。
和正在创建问题的那个:
如果@supplierid == 0则返回supplierid为null的所有记录
我试着写这个像
var answers =
from thisChargeableService in this.GetAll()
where
(
(
(supplierId == null) ||
(
((supplierId < 1) && (thisChargeableService.SupplierId == null)) ||
((supplierId != null) && (thisChargeableService.SupplierId == supplierId.Value))
)
));
这适用于前两个条件,但是当@supplierid = 0时,不返回任何内容。
非常感谢任何帮助
修改
基本上我有一个ID为0的N / A下拉列表。我用它来识别从下拉列表中选择了一个选项,并且用户的目标是供应商ID为N / A的所有行。
数据库不包含0作为supplierid的条目,所以我试图将其作为目标,其中supplierid为null或SQL中的以下
SELECT * FROM ChargeableService
WHERE
(@supplierid is null)
OR
(
(@supplierid is not null and supplierid = @supplierid) or
(@supplierid = 0 AND supplierid is null)
)
答案 0 :(得分:0)
我已经采取了您的查询并针对一些类似的数据运行它,以下工作:
var answers =
from thisChargeableService in this.GetAll()
where
(
supplierId == null ||
(supplierId == 0 && thisChargeableService.SupplierId == null) ||
(supplierId > 0 && thisChargeableService.SupplierId == supplierId)
)
select thisChargeableService;
答案 1 :(得分:0)
使用Linq,没有必要尝试构建一个查询来完成所有操作。相反,你可以在buts中构建表达式,让延迟执行构建并执行正确的sql。
所以,这就是我的方式。
var answers = this.GetAll().AsQueryable();
if (supplierId.HasValue && (supplierId.Value != 0))
answers = answers.Where(a=>a.SupplierId == supplierId.Value);
if (supplierId.HasValue && (supplierId.Value == 0))
answers = answers.Where(a=>!a.SupplierId.HasValue);