Fluent NHibernate does not create IN part of WHERE clause

后端 未结 3 417
借酒劲吻你
借酒劲吻你 2021-01-12 23:20

I have Fluent NHibernate Linq queries where I check values based on run time arrays. A basic example would be something like:

var array = [1,2,3,4,5,6];
usin         


        
相关标签:
3条回答
  • 2021-01-12 23:36

    Does it make a difference if you change your Query method to the following ?

    public IList<T> Query(Expression<Func<T, bool>> criteria)
    {
      using (var session = SessionProvider.SessionFactory.OpenSession())
      {
        return session.Query<T>().Where(criteria).ToList();
      }
    }
    

    This is how I usually proceed with a generic Query :

        public List<TOut> GetEntitiesLinq<TIn,TOut>(Expression<Func<IQueryable<TIn>,IQueryable<TOut>>> myFunc)
        {
            var t = (myFunc.Compile())(_session.Query<TIn>()) ;
            return t.ToList();
        }
    

    Then how I would use it in your case :

    var myObjList = myQueryManager.GetEntitiesLinq<MyObject,MyObject>(x=>x.Where(myObj => array.Contains(myObj.CompareVal)));
    

    Hope this will help

    0 讨论(0)
  • 2021-01-12 23:37

    Can you use QueryOver and WhereRestrictionOn instead?

    session.QueryOver<MyObject>().WhereRestrictionOn(o => o.CompareVal).IsIn(array).List();
    
    0 讨论(0)
  • 2021-01-12 23:43

    Use Any:

     return session.Query<MyObject>().Where(x => array.Any(y => y == x.CompareVal)).ToList();
    

    Your repository pattern (using plain Func) automatically materializes your query to list, if you want something to be deferredly executed, use IQueryable, don't use Func only

    Something to note - I have a Generic Repository class that all of these calls are funneled through. The Query method is as follows:

    public IList<T> Query(Func<T, bool> criteria)
    {
      using (var session = SessionProvider.SessionFactory.OpenSession())
      {
        return session.Query<T>().Where(criteria).ToList();
      }
    }
    

    Your repository just mimic what is already provided out of the box by NHibernate

    0 讨论(0)
提交回复
热议问题