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)
尝试
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