【问题标题】:fluent nhibernate: querying Many-to-many entity with equivalent of the 'any' keyword流利的nhibernate:查询与'any'关键字等效的多对多实体
【发布时间】:2011-09-16 09:47:21
【问题描述】:

我在学生和教授 (_students_selected) 之间的数据库(带有桥接表)中建立了一个多对多关系,在我的实体中,我将其建模为多对多关系,即教授有很多学生。

HasManyToMany(x => x.Students)
   .Table("_students_selected").ChildKeyColumn("student_key").ParentKeyColumn("professor_key");

public class Professor    
{
        private IList<Students> _students;
        public virtual Student Students
        {
            get { return _students; }
            set { _students = value; }
        }
}

我无法查询教授的学生,我尝试了以下方法,但是 nhibernate 无法识别 Any 来过滤列表。什么等价于any?

_unitOfWork.Session.QueryOver<Professor>()
   .Where(x => x.Students.Any(i => i.Id.IsIn(childStudentList))).List();

【问题讨论】:

  • 你试过.WithSubquery.Where(x =&gt; x.Students.Any(i =&gt; i.Id.IsIn(childStudentList)));吗?
  • 您好,感谢您的回复,我刚刚尝试了以下方法:_unitOfWork.Session.QueryOver().WithSubquery.Where( x => x.Students.Any(i => i .Id.IsIn(childStudentList))).List();我得到以下错误'无法将'System.Linq.Expressions.MethodCallExpressionN'类型的对象转换为'System.Linq.Expressions.BinaryExpression'。'

标签: linq nhibernate fluent any


【解决方案1】:

这帮助我解决了类似的问题:nhibernate queryover not loading eagerly with a many to many joinalias

我能够将其简化为:

Role role = null;

session.QueryOver<User>()
    .JoinAlias(u => u.Roles, () => role)
    .Where(() => role.Id == someId);

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多