我正在尝试获取一些数据,但我不知道如何在linq中执行此操作,这就是我要尝试的方式
from so in db.Operations
where ((opType!= "0" ? so.Operation == int.Parse(opType) : false)
&& (idState!=0 ? so.State == idState : false)
&& (start != null ? so.StartDate == start : false)
&& (end !=null ? so.EndDate == end : false))
select so
optype是一个Int, idState是一个Int, 结束是日期时间, 开始是一个datime
我想要做的是,如果那些不是null,它们会添加到查询函数中,所以我可以将所有数据放在一起
例如:在c#代码中
if((opType!= "0")
where (so.Operation == int.Parse(opType)
if(idState!=0)
where (so.Operation == int.Parse(opType) && so.State == idState
.......
所以如果那不是null,那个sql查询中的那个句子(TRUE部分,我不想使用false部分),将它添加到where,所以我可以搜索所有非null的参数或0
答案 0 :(得分:1)
由于您是&&
,因此您希望: true
代替: false
。
答案 1 :(得分:0)
opType!= "0" ? so.Operation == int.Parse(opType) : false
你不应该使用so.operation == int.parse ....而是使用so.operation = int.Parse(opType)
答案 2 :(得分:0)
不确定你想要什么,但这是一个尝试:
var query = db.Operations.AsQueryable();
if (opType != null && opType != "0")
query = query.Where(x => x.Operation == int.Parse(opType);
if (idState != 0)
query = query.Where(x => x.State == idState);
if (start != null) // assuming that start is of type DateTime? otherwise use DateTime.MinValue
query = query.Where(x => x.StartDate.Date == start); // maybe >= is more appropriate
if (end != null) // also DateTime? assumed
query = query.Where(x => x.EndDate.Date == end); // maybe <= is more appropriate
var result = query.ToList(); // e.g. could also do an foreach, depending what you want to do
这种方法的技巧是连续建立查询。在使用.ToList()
或foreach
枚举列表之前,不会枚举查询。
实际上这应该是相同的:
from so in db.Operations
where ((opType != null && opType!= "0" ? so.Operation == int.Parse(opType) : true)
&& (idState!=0 ? so.State == idState : true)
&& (start != null ? so.StartDate.Date == start : true)
&& (end !=null ? so.EndDate.Date == end : true))
select so
答案 3 :(得分:0)
您可以使用条件参数。
变化:
where ((opType!= "0" ? so.Operation == int.Parse(opType) : false)
要:
where ((opType!= "0" ? so.Operation == int.Parse(opType) : so.Operation == Operation)
依旧......