我有问题。我想构建一个动态的LINQ查询,如下所示:
var result = from li in datacTx.LIs
where
(((StartDate != null) && (StartDate.Date != DateTime.MinValue)) ? li.Available <= StartDate.Date : true) &&
(((EndDate != null) && (EndDate.Date != DateTime.MinValue)) ? li.Expire <= EndDate.Date : true)
select new
{
A,
B,
C,
D
};
在调用此查询之前,我使用以下命令初始化StartDate和EndDate:
StartDate = DateTime.MinValue;
EndDate = DateTime.MinValue;
问题在于&#34; if&#34;总是错的我永远不会得到真正的&#34;如果StartDate和EndDate具有MinValue,则为branch。
答案 0 :(得分:1)
尝试使用更简单的条件:
where ((StartDate == DateTime.MinValue || li.Available <= StartDate.Date) &&
(EndDate == DateTime.MinValue || li.Expire <= EndDate))
但是,如果我要实现这样的东西,我实际上会动态创建查询:
var query = datacTx.LIs;
if(StartDate != DateTime.MinValue)
query = query.Where(li => li.Available <= StartDate.Date);
if(EndDate != DateTime.MinValue)
query = query.Where(li => li.Expire <= EndDate .Date);
var result = query.Select(x => new { A, B, C, D });