首页 > 解决方案 > 如果日期不是低日期,则仅包含在 where 条件中(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
              }

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

标签: c#sql.netsql-serverlinq

解决方案


我会利用在您编写 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)"


推荐阅读