var query = (from p in session.Query<Product>() join t in session.Query<ProductTranslation>() on p.ProductId equals l.ProductId where p.YearIntroduced >= 1950 && string.Compare(t.ProductName, "B") >= 0 select new { p, t }).Cacheable(); var list = query.ToList();
Must be done this way:
var query = from p in session.Query<Product>() join t in session.Query<ProductTranslation>() on p.ProductId equals l.ProductId select new { p, t }; query = query.Where(q => q.p.YearIntroduced >= 1950 && string.Compare(q.t.ProductName, "B") >= 0).Cacheable(); var list = query.ToList();
If you are a one-stop-shop kind of person, you might prefer the multiple Linq statements be kept together in just one Linq statement:
var query = (from q in from p in session.Query<Product>() join t in session.Query<ProductTranslation>() on p.ProductId equals l.ProductId select new { p, t } where q.p.YearIntroduced >= 1950 && string.Compare(q.t.ProductName, "B") >= 0 select q).Cacheable(); var list = query.ToList();
The above things won't be possible if a DAL/Repository component layered on top of an ORM component hides or neglect to expose useful functionality, or if there's a project policy of not allowing the developer to use NHibernate's API directly, e.g., caching, fetching
The developer should be able to access the caching API when there's a need.
"You can solve every problem with another level of indirection, except for the problem of too many levels of indirection" – D.Wheeler
Here's a case of too many indirections: http://ayende.com/blog/156577/on-umbracos-nhibernates-pullout
Happy Coding! ツ
No comments:
Post a Comment