Linq ISNULL功能

时间:2011-07-30 08:07:45

标签: linq linq-to-sql linq-to-nhibernate

我在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中实现此功能?有什么想法吗?

谢谢

2 个答案:

答案 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查询。