0

我正在尝试编写一个相当于我拥有的存储过程的 linq 语句。我所拥有的没有返回任何结果,所以我认为某处一定是错误的。

到目前为止我所拥有的

from r in context.View
where ValOne== null ? false : r.ColOne.Equals(ValOne) && 
      ValTwo == null ? false : r.ColTwo.Equals(ValTwo) && 
      (r.ODate >= Start && r.ODate <= End) 
select r

我想改成 linq

select * from View
Where (@ValOne is null or ColOne = @ValOne)
  and (@ValTwo is null or ColTwo = @ValTwo)
  and (@Start is null or ODate between @Start and @End)
4

3 回答 3

3

尝试

   from r in context.View
   where (ValOne == null || r.ColOne.Equals(ValOne)) && 
      (ValTwo == null ||r.ColTwo.Equals(ValTwo)) && 
      (Start == null || (r.ODate >= Start && r.ODate <= End)) 
   select r
于 2013-08-22T13:58:25.937 回答
1

您的 sql 查询返回 ValOne 为 null、ValTwo 为 null 且 Start 也为 null 的行。但是您的 linq 查询检查 ValOne 和 ValTwo 是否为空,但如果是这种情况,则分配 false ,这不能反映您的 sql 查询正在做什么。

你能试一下吗 :

from r in context.View
where ValOne== null ? true: r.ColOne.Equals(ValOne) 
    && ValTwo == null ? true: r.ColTwo.Equals(ValTwo) 
    && (r.ODate >= Start && r.ODate <= End) 
select r
于 2013-08-22T13:58:44.520 回答
1
from r in context.View
where ValOne== null || r.ColOne.Equals(ValOne) && 
      ValTwo == null || r.ColTwo.Equals(ValTwo) && 
      (r.ODate >= Start || r.ODate <= End) 
select r
于 2013-08-22T14:02:51.270 回答