Iinq等效于存储过程

本文关键字:存储过程 Iinq | 更新日期: 2023-09-27 18:28:42

我正在尝试编写一个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)

Iinq等效于存储过程

尝试

   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

您的sql查询返回的行中,ValOne为null,ValTwo为null,Start也为null。但是您的linq查询会检查ValOne和ValTwo是否为null,但如果没有反映sql查询的作用,则会赋值为false。

你能试试吗:

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
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