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

我有一个查询,其中有一个条件查询和查找在特定日期之后添加的地址。日期字段不是必需的,因此我希望仅在条件字段不是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
              }

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

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

我会充分利用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的东西,而不是DB将评估的东西。当对数据库查询进行“通配符”查询时,使用“如果x为真,然后添加另一个where子句”的模式,而不是说“ where(local-value-of-x-equals-local-常数或some-db-data-value-equals-y)“

,

如果我对您的理解正确,那么您有一个名为DateTime的{​​{1}}对象,可以将其设置为默认值,并且您想返回该项目的req.dtmDate字段为大于DateAdded,除非req.dtmDatereq.dtmDate,在这种情况下,应返回所有记录。

如果是这样,我想您可以将现有代码修改为:

1/1/0001
本文链接:https://www.f2er.com/3142656.html

大家都在问