2012-05-08 180 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(),如果你真的需要运行查询马上。