2012-05-08 103 views
0

我正在處理自定義成員資格提供程序,我有nhibernate條件api查詢工作。 我在將這些查詢翻譯成linq時遇到了問題。下面的代碼nhibernate查詢條件api linq查詢

標準API代碼

users = session.CreateCriteria(typeof(Entities.User)) 
       .Add(NHibernate.Criterion.Restrictions.Like("Email", emailToMatch)) 
       .Add(NHibernate.Criterion.Restrictions.Eq("ApplicationName", this.ApplicationName)) 
       .List<Entities.User>(); 

uncomplete LINQ

users = session.Query<Entities.User>() 
      .Where(x => x.EMail == emailToMatch) 
      //missing ApplicationName equal to this.ApplicationName 
      .ToList(); 

更新:圖它

users = (from User u in session.Query<Entities.User>() 
       where u.Email == emailToMatch && "ApplicationName" == this.ApplicationName 
       select u).ToList(); 
+0

將'&'改爲'&&',否則你將執行一個邏輯AND http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.80).aspx – Rippo

+0

錯字:)謝謝。 – Grunf

回答

1
from user in session.Query<User>() 
where user.Email == emailToMatch && user.ApplicationName == this.ApplicationName 
select user; 

注意你的標準提到 「喜歡」 來實現同樣在linq中使用包含allthough這可能是無效的WRT相匹配的電子郵件

from user in session.Query<User>() 
where user.Email == emailToMatch && user.Name.Contains("Adam") 
select user; 
0

使用LINQ方法的語法:

users = session.Query<Entities.User>() 
      .Where(user => user.Email == emailToMatch && user.ApplicationName == this.ApplicationName) 

注:只有做.ToList(),如果你真的需要運行查詢馬上。