2012-10-31 57 views
0

我想编写一个动态LINQ查询,它根据两个时间帧startTime和errorTime来检查'where'条件。 本代码是在这里,在动态LINQ中添加条件

IQueryable<LogFormat> errorLines = null; 
if (!string.IsNullOrEmpty(errorStartTime) && !string.IsNullOrEmpty(errorTime)) 
{ 
    var sTime = DateTime.Parse(errorStartTime); 
    var eTime = DateTime.Parse(errorTime); 
    errorLines = from errorLine in File 
       where 
        (errorLine.DateTime >= sTime && errorLine.DateTime <= eTime) && 
        (
        errorLine.Level == "ERR" 
        || errorLine.Level == "WARN" 
        ) 
       select errorLine; 
} 
else if (!string.IsNullOrEmpty(errorStartTime)) 
{ 
    var sTime = DateTime.Parse(errorStartTime); 
    errorLines = from errorLine in File 
       where 
        errorLine.DateTime >= sTime 
        && 
        (
        errorLine.Level == "ERR" 
        || errorLine.Level == "WARN" 

        ) 
       select errorLine; 

} 
else if (!string.IsNullOrEmpty(errorTime)) 
{ 
    var eTime = DateTime.Parse(errorTime); 

    errorLines = from errorLine in File 
       where 
        errorLine.DateTime <= eTime 
        && 
        (
        errorLine.Level == "ERR" 
        || errorLine.Level == "WARN" 
        ) 
       select errorLine; 

} 
else 
{ 
    errorLines = from errorLine in File 
       where 
        errorLine.Level == "ERR" 
        || errorLine.Level == "WARN" 


       select errorLine; 

} 

我能知道如何只有一个查询,以便我可以把开始时间和动态errortime得到的结果?

回答

2

你可以把它的动态调用where条款多次,根据具体的情况:

var errorLines = File.Where(e => e.Level == "ERR" 
           || e.Level == "WARN");     

if (!string.IsNullOrEmpty(errorStartTime)) 
{ 
    var sTime = DateTime.Parse(errorStartTime); 
    errorLines = errorLines.Where(e => e.DateTime >= sTime); 
} 

if (!string.IsNullOrEmpty(errorTime)) 
{ 
    var eTime = DateTime.Parse(errorTime); 
    errorLines = errorLines.Where(e => e.DateTime <= eTime); 
}