Функциональность Linq ISNULL - PullRequest
1 голос
/ 30 июля 2011

у меня есть запрос в 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)

im, использующий 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;

Этот запрос linq отлично работает дляUserName, но не работает, если фильтры UserName и FullName имеют какое-то значение.как добиться этой функциональности в LINQ?Любая идея?

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 июля 2011

Я бы пошел с динамическим построением запроса:

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-запрос для каждого случая.

2 голосов
/ 30 июля 2011

РЕДАКТИРОВАТЬ: совершенно новый ответ теперь, когда у нас есть больше деталей ...

Я подозреваю, что это просто проблема приоритета.Выразите это явно:

Allusers = from u in session.Query<User>()
           where (u.UserName.Contains(UserName) || UserName == null)
                 && (u.FullName.Contains(FullName) || FullName == null)
           select u;
...