Getting {"Specified method is not supported."} exception when perform a query on a list which elemts should be looked up in another list
I know it sounds stupid to some extend and vague but I need it :D
I want to perform a query on NH3.1 :var internalReferences = Repository<InternalReferenceRule>
                    .FindAll(e => e.PropertyType.EntityType.Id == 1)
var properties = Repository<IProperty>
                        .Find(p => p.PropertyType.RuleObjects.Any(r => internalReferences.ToList().Any(i => i.Id == r.Id)));
the first list (internalReferences) is going to be used in the second query which wants to check if the RuleObjects of a property are available in the first list.
I kinda simplified the original query to make it more understandable.....
anyway, I get the System.NotSupportedException from NHibernate and its message is : {"Specified method 开发者_如何学JAVAis not supported."}
any idea?
You can't use internalReferences.Any() in NHibernate queries because it can't know how to translate that to SQL. Try the following
var internalReferences = Repository<InternalReferenceRule>
   .FindAll(e => e.PropertyType.EntityType.Id == 1).Select(x => x.Id).ToList();
var properties = Repository<IProperty>
   .Find(p => p.PropertyType.RuleObjects.Any(r => internalReferences.Contains(r.Id)));
That should result in a SQL query that uses IN (:p0, :p1, :p2).
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论