我创建了一个winform应用程序,我使用Nhibernate。在我的应用程序中,我需要选择我的数据库中的所有产品(74000行)。查询在Nhibernate
在我的产品对象上,我有一个对象列表,称为条形码。
我要选择我的所有产品,但只应装满物品放在产品操作搜索条码列表中,如果barcodetype = 20,组识别符号= 4
我不知道如何写这个查询,我一直在尝试与分离的标准,但我不能得到它的工作。任何人都可以帮我编写查询,或者链接到一个页面,我可以看到它的完成情况?
我创建了一个winform应用程序,我使用Nhibernate。在我的应用程序中,我需要选择我的数据库中的所有产品(74000行)。查询在Nhibernate
在我的产品对象上,我有一个对象列表,称为条形码。
我要选择我的所有产品,但只应装满物品放在产品操作搜索条码列表中,如果barcodetype = 20,组识别符号= 4
我不知道如何写这个查询,我一直在尝试与分离的标准,但我不能得到它的工作。任何人都可以帮我编写查询,或者链接到一个页面,我可以看到它的完成情况?
由于集合不能“半载”,因此需要投影。
我这是怎么通常做到这一点:
var result = session.CreateQuery(@"
select product, barcode
from Product product
join product.Barcodes barcode
where barcode.Barcodetype = 20
and barcode.Groupid = 4
")
.List<object[]>()
.ToLookup(x => (Product)x[0], x => (Barcode)x[1]);
(我假定你有标性质称为Barcodetype和群ID,因为你没有指定任何关系,所有产品都有至少一个这种类型的条形码)
而不是实例化所有产品对象及其条形码的一部分,如何使用Criteria对条形码进行过滤,通过所提及的类型/组进行过滤并加入到父产品中。
然后使用AliasToBeanResultTransformer填充简单DTO对象的列表。
或使用无状态会话... – asgerhallas 2011-02-17 14:49:02
我找到了答案,我做了一个外部左连接 crit.CreateCriteria(“barcodeses”,“bc”,SqlCommand.JoinType.LeftOuterJoin).Add(Expression.Or(Expression .Eq(“bc.Groupid”,CType(cbBarcodeGroup.SelectedItem,Domain.Barcodegroup).ID),Expr ession.IsNull(“bc.Groupid”)))
为什么你需要选择所有74,000行? – Phill 2011-02-16 20:36:53
我需要它用于导出方法。 – 2011-02-16 20:45:30