我在db中有两个重要的日期字段。
startTime和goTime
我想创建自定义查询,其中一个参数可能为空,请参阅我的示例
public List<Type> GetAll( DateTime startTime, DateTime goTime )
{
List<Type> getResultBetween =
(from i in DB.TABLENAME
where i.startTime >= startTime && i.goTime == ANYTHING
select i).ToList();
return getResultBetween;
}
现在的目标是,即使没有定义goTime,我仍然可以达到给定的startTime。 如果我定义goTime并让Starttime为空,它也应该工作。雷索应该给我所有人,直到上午。
谢谢
答案 0 :(得分:9)
尝试这样的事情,使用可空类型并明确构建查询:
public List<Type> GetAll(DateTime? startTime, DateTime? goTime )
{
IQueryable<Type> query = DB.TABLENAME;
if (startTime != null)
{
query = query.Where(i => i.startTime >= startTime.Value);
}
if (goTime != null)
{
query = query.Where(i => i.goTime == goTime.Value);
}
return query.ToList();
}
答案 1 :(得分:2)
试试这个“hacked”where子句:
where (i.startTime >= (startTime ?? i.startTime)) && (i.goTime >= (goTime ?? i.goTime))
为此,startTime和goTime应为Nullable&lt; DateTime&gt; (或DateTime?)。
这适用于所有情况,即......时......
答案 2 :(得分:0)
奇怪它不起作用。欲获得更多信息。这是一个网络服务,但我希望这不是问题。
我的方法看起来像。
public List<FDPGeschaefte> AlleGeschaefteZwischenBestimmtemDatum(string StartDatum, string EndDatum)
{
IQueryable<FDPGeschaefte> query = DB.FDPGeschaefte;
if (StartDatum != null && EndDatum != null)
{
query = query.Where(i => i.SysCreated > DateTime.Parse(StartDatum) && i.SysCreated <= DateTime.Parse(EndDatum));
}
if (StartDatum != null)
{
query = query.Where(i => i.SysCreated >= DateTime.Parse(StartDatum));
}
if (EndDatum != null)
{
query = query.Where(i => i.SysCreated <= DateTime.Parse(EndDatum));
}
return query.ToList();
}
如果我在webservice中只键入一个参数。它会抛出一个无效的datetime参数。
答案 3 :(得分:0)
public static List<Type> GetAll(DateTime? startTime, DateTime? goTime)
{
List<Type> getResultBetween =
(from i in DB.TableName
where (startTime.HasValue && i.StartTime >= startTime)
|| (goTime.HasValue && i.GoTime >= goTime)
select i).ToList();
return getResultBetween;
}