2011-07-30 90 views
1

我有一個查詢在SQLLINQ的ISNULL功能

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) 

讀音字使用功能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查詢工作正常的用戶名,但沒有工作,如果用戶名和全名都篩選有一定的價值。 如何在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以獲得更多有關提問的更多建議。 –