我需要一些帮助来确定应该基于一对多关系进行过滤的查询。我有一个表“产品”和“产品类型”。其中“产品”有很多“产品类型”。这些模型运行良好我只是不知道如何根据“ProductType”记录过滤“Product”记录。
在此示例中,我想选择所有“产品”,其中 Product.Name == "somename" && Product.Version == "9.6"。我想在 ProductType.Type == "someType" 的地方过滤这些结果。以下是抛出异常:
无法解析属性:产品类型:my.namespace.ProductType
我正在使用 Ayende 博客中的示例:查询示例
var product = _session.CreateCriteria<Product>()
.Add(Restrictions.Eq("Name", "somename"))
.Add(Restrictions.Eq("Version", "9.6"))
.Add(Subqueries.PropertyIn("Id",
DetachedCriteria.For<ProductType>()
.SetProjection(Projections.Property("Product.Id"))
.CreateCriteria("ProductType")
.Add(Restrictions.Eq("Type", "someType"))
)).List<Product>().SingleOrDefault();
我接近了吗?有人可以给我一些帮助吗?谢谢!
编辑
这让我很亲近。如果我删除第二个 CreateCriteria,我会返回一个填充了 Types 的产品。一旦我添加加入回来.. 我得到 0 个结果。
var products = _session.CreateCriteria("Product")
.Add(Restrictions.Eq("Name", "somename"))
.Add(Restrictions.Eq("Version", "9.6")) //This works
.CreateCriteria("Types", "productTypes", JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("Type", "typename")).List<Product>();
return products.FirstOrDefault();