繁体   English   中英

如果日期不是低日期,则仅包含在 where 条件中(01/01/0001)

[英]Only include in where condition if date is not low date(01/01/0001)

我有一个查询,它有一个 where 条件来检查和查找在某个日期之后添加的地址。 日期字段不是必需的,因此我希望仅在不是 1/1/0001 时才考虑条件的日期字段。 dtmDate 是正在传递的参数

询问

from b in _context.customer
           join d in _context.Address on b.id equals d.Id 
           join e in _context.units on d.Id equals e.Id
           where (req.dtmDate.Year != 1 && d.DateAdded >= req.dtmDate)

select new modelAddress
              {
               address= d.address
              }

但这不起作用。 它没有返回任何行

我会利用 LINQ 查询在编写时不执行的事实,因此您可以在创建基本查询后有条件地添加子句:

var query = from b in _context.customer
       join d in _context.Address on b.id equals d.Id 
       join e in _context.units on d.Id equals e.Id;

if(req.dtmDate.Year != 1)
  query = query.Where(d.DateAdded >= req.dtmDate);

var result = query.Select(
  new modelAddress
  {
    address= d.address
  }
);

我更喜欢这个,因为我以前遇到过问题,特别是在 EF LINQ 查询时 Where 子句包含在代码中本地评估为 true 的内容,而不是数据库将评估的内容。 在“通配符”数据库查询时,使用“如果 x 为真,则添加-另一个-where-clause”而不是“where(local-value-of-x-equals-local-”的模式似乎效果更好常量或一些-db-data-value-equals-y)"

如果我理解正确,您有一个名为req.dtmDateDateTime object 可能设置为默认值,并且您希望返回项目的DateAdded字段大于req.dtmDate的所有项目,除非req.dtmDate1/1/0001 ,在这种情况下应返回所有记录。

如果是这种情况,我认为您可以将现有代码修改为:

where (req.dtmDate.Year == 1 || d.DateAdded >= req.dtmDate)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM