我正在使用Fluent NHibernate并仅按惯例进行映射,这些是我要选择的类:
//The attributes are used in my conventions
[Table("Entries")]
public class Entry
{
[Id] public virtual int EntryID { get; set; }
[Join("UserID", Join.Left)] public virtual User User { get; set; }
}
[Table("Users")]
public class User
{
[Id] public virtual int UserID { get; set; }
public virtual string Name { get; set; }
}
我的选择功能是:
public IList<T> GetBy<T>(Expression<Func<T, bool>> expression) where T : class
{
ISession session = _dal.GetSession(typeof(T));
ICriteria criteria = session.CreateCriteria<T>();
//Error: could not resolve property "User.Name"
criteria.Add(Restrictions.Where<T>(expression));
return criteria.List<T>();
}
我正在用这个表达式打电话:
IList<Entry> entries = Repository.GetBy<Entry>(e => e.User.Name == "Myself");
上面的代码适用于属于根类的表达式成员,但如果它涉及任何类的属性,则不行,我的问题是,无论如何我能以简单的方式完成上面的代码吗? (无需自己解析表达式。)
答案 0 :(得分:0)
作为@Claudio Redi评论,标准不会解析第二级间接(e.User.Name)。您可以使用LINQ来解决此问题,例如:
public IList<T> GetBy<T>(Expression<Func<T, bool>> expression) where T : class
{
ISession session = _dal.GetSession(typeof(T));
var query = session.Query<T>().Where(expression);
return query.ToList();
}