2011-07-30 5 views
1

제가Linq에 ISNULL 기능성

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) 

제가 ORM 유창 nHibernate 수의 m을 사용하는 쿼리를 갖는다.

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

이 LINQ 쿼리는 사용자 이름 잘 작동하지만, 사용자 이름과하면 FullName 모두 일부 값이 필터링 경우 작동하지 :

내가이 노력하고있어. LINQ에서이 기능을 구현하는 방법은 무엇입니까? 어떤 아이디어?

감사

답변

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 쿼리를 얻을 수 있습니다.

2

편집 : 우리는 더 많은 정보를 가지고 있음을 이제 완전히 새 응답 ...

나는 이것이 단지 우선 순위의 문제가 의심. 명시 적으로 표현 :

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

내 질문이 업데이트되었습니다. – Saad

+0

@Saad : 업데이트 된 답변보기. 그 정보를 처음부터 시작하면 정말 도움이되었을 것입니다. 질문에 대한보다 자세한 제안은 http://tinyurl.com/so-hints를 참조하십시오. –