当前位置: 首页 > 编程语言 > C#

NHibernate QueryOver – 检索全部,并标记已经“选中”的那些分享

时间:2023-04-10 12:02:41 C#

C#学习教程:NHibernateQueryOver——检索所有并标记那些已经被“检查”的..并通过运行此查询,我得到了选定的(category_x_product表):intproductId=11;类别猫=空;CategoryProductcp=null;varsubQuery=QueryOver.Of(()=>cp).Where(()=>cp.ProductId==productId).Select(Projections.Distinct(Projections.Property(()=>cp.CategoryId)));结果=Session.QueryOver(()=>cat).WithSubquery.WhereProperty(()=>cat.Id).In(subQuery).List();任何组合这两个查询的方法,以便我得到所有类别的布尔值,指示在CategoryProduct查询中实际“选择”了哪一个。可以将它映射到这样的实体吗?CategorySelected--------------类别类别{get;放;}boolIsSelected{得到;放;我试图使用QueryOver找到答案,但没有成功。这甚至可以在“或多或少”的简单查询中实现吗?任何帮助是极大的赞赏。谢谢!实现此目的的一种方法是创建条件SELECT语句。在SQLServer的情况下,我们想要生成类似这样的东西SELECTCASECategoryIdIN(....subselect)THEN1ELSE0END...但是感谢NHibernate和抽象查询API,我们可以创建查询以在所有支持的数据库上运行用方言工作。让我们尝试创建一个新解决方案的草稿。我们将首先调整子查询varsubQuery=QueryOver.Of(()=>cp).Select(Projections.Distinct(Projections.Property(()=>cp.CategoryId)));现在我们将创建条件语句varisSelected=Projections.Conditional(Subqueries.PropertyIn("Id",subQuery)//CategoryIDtobeintheinnerselect,Projections.Constant(1),Projections.Constant(0));我们将此条件注入QueryOver并使用Transformers来更正PopulateCategory属性(包括虚拟IsSelected)Select(isSelected).WithAlias(()=>category.IsSelected).Select(ca=>ca.Id).WithAlias(()=>category.Id)...//我们希望填充的所有属性)//再次将结果转换为类别.TransformUsing(Transformers.AliasToBean()).List();我们新的IsSelected属性(未映射,但仅用于此SELECT(投影))现在填充了正确的信息。注意:这种方法有效,但这些陈述应作为草稿。在您的情况下,可能需要进行一些调整...以上是C#学习教程:NHibernateQueryOver-检索所有内容并标记那些已被“选中”的内容分享所有内容,如果对任何人有用并且需要了解更多有关C#的信息学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: