我在SQL中有一个查询
Declare @Id Int
set @UserName = Null
set @FullName = Null
Select * from tblPermission where (UserName= @UserName OR @UserName IS NULL) && (
FullName = @FullName OR @FullName IS NULL)
我使用Fluent nHibernate作为ORM。
我正在尝试这个: var Allusers = from u in session.Query<User>()
where u.UserName.Contains(UserName) || UserName == null
&& u.FullName.Contains(FullName) || FullName == null
select u;
如果UserName和FullName过滤器都具有某些值,则此linq查询适用于UserName但不起作用。 如何在LINQ中实现此功能?有什么想法吗?
谢谢
答案 0 :(得分:2)
我怀疑这只是一个优先问题。明确表达:
Allusers = from u in session.Query<User>()
where (u.UserName.Contains(UserName) || UserName == null)
&& (u.FullName.Contains(FullName) || FullName == null)
select u;
答案 1 :(得分:2)
我会动态构建查询:
var Allusers = session.Query<User>();
if (UserName != null)
Allusers = Allusers.Where(u => u.UserName.Contains(UserName));
if (FullName != null)
Allusers = Allusers.Where(u => u.FullName.Contains(FullName));
由于它是一个查询,因此在枚举之前不会执行它,因此链接Where
调用将不会多次执行。另外,您将获得针对每种情况优化的SQL查询。