簡體   English   中英

使用LINQ查詢NHibernate屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM