我有两个班级Product
和ProductDetail
(见下文)
我想在同一个查询中,在Code
in Product
object 和 on Name
in上进行搜索ProductDetail
。结果应该是一个Product
列表。
我试过这个:
var search = "stringToSearch";
var list = _session.QueryOver<Product>()
.Fetch(x => x.ProductDetails).Eager.Future<Product>()
.Where(
x => x.Code.StartsWith(search) ||
x.ProductDetails.First().Name.StartsWith(search))
.ToList();
当搜索与Code
属性和Name
的第一条记录匹配时,该查询给了我正确的结果ProductDetail
,但我想对 的所有记录进行搜索ProductDetails
。
我怎样才能做到这一点 ?
谢谢,
public class Product
{
public virtual int Id { get; set; }
public virtual string Code { get; set; }
public virtual IList<ProductDetail> ProductDetails { get; set; }
}
public class ProductDetail
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual IList<Product> ProductDetails { get; set; }
}
The mapping :
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Table("Product");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Code).Length(20).Unique().Not.Nullable();
HasManyToMany(x => x.ProductDetails)
.Cascade.All()
.Table("ProductsProductsDetails");
}
}
public class ProductDetailMap : ClassMap<ProductDetail>
{
public ProductDetailMap()
{
Table("ProductDetail");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Name).Not.Nullable().Length(50);
Map(x => x.Description).Length(200);
HasManyToMany(x => x.Products)
.Cascade.All()
.Inverse()
.Table("ProductsProductsDetails");
}
}