[英]Query NHibernate Properties with LINQ
我有以下(非常簡化的)域:
public class Product
{
public virtual int Id { get; set; }
public virtual string Description { get; set; }
public virtual IList<Category> Categories { get; set; }
}
public class Category
{
public virtual int Id { get; set; }
public virtual string Description { get; set; }
}
使用以下XML映射多對多集合:
<bag name="Categories" table="ProductsCategories">
<key column="ProductID" />
<many-to-many column="CategoryID" class="Category" />
</bag>
當我使用product屬性加載類別時,所有文件都可以正常運行:
Product product = ProductRepository.Find(1);
var categories = product.Categories;
問題是,當我嘗試過濾我的收藏集時,例如:
Product product = ProductRepository.Find(1);
var categories = product.Categories.Where(c => c.SomeProperty == someValue);
查詢不是針對數據庫執行的,而是使用LINQ to Objects來過濾結果! 是否可以在不使用HQL且無需映射名為“ OrderDetail”的新實體的情況下解決此問題?
您需要查詢category
,而不是product
的類別。 (您可以使用ISession.Filter
您最初想要的操作,但是上次我沒有使用LINQ)。
例如
from category in session.Linq<Category>
where category.Products.Contains(product) and category.SomeProperty == someValue
select category
問題是Categories
被聲明為
IList<Category> Categories
這意味着您的查詢將使用Enumerable.Where
而不是Queryable.Where
。
我希望NHibernate支持另一個實現IQuerable<T>
接口,您可以使用該接口來聲明屬性,例如
public virtual IQueryableList<Category> Categories { get; set; }
我沒有在憤怒中使用NHibernate,所以我不知道實際的類型是什么,但這就是您應該尋找的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.