帮助linq查询

时间:2010-03-08 22:59:41

标签: linq

我正在尝试获取一些数据,但我不知道如何在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

4 个答案:

答案 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) 

依旧......