c# – NHibernate QueryOver – 检索全部,并标记已经“选中”的那些
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – NHibernate QueryOver – 检索全部,并标记已经“选中”的那些,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2030字,纯文字阅读大概需要3分钟。
内容图文
![c# – NHibernate QueryOver – 检索全部,并标记已经“选中”的那些](/upload/InfoBanner/zyjiaocheng/786/3b995b908892413097a6cf4859bb14fa.jpg)
亲爱的NHibernate专家,
以下查询为我提供了所有类别:
var result = Session.QueryOver(() => cat).List();
..并通过运行此查询,我得到所选的(category_x_product表):
int productId = 11;
Category cat = null;
CategoryProduct cp = null;
var subQuery = QueryOver.Of(() => cp)
.Where(() => cp.ProductId == productId)
.Select(Projections.Distinct(Projections.Property(() => cp.CategoryId)));
result = Session.QueryOver(() => cat)
.WithSubquery
.WhereProperty(() => cat.Id).In(subQuery)
.List();
以任何方式组合这两个查询,以便我获得所有带有布尔值的类别,指示在CategoryProduct-query中实际上“选择”了哪一个.
将它映射到这样的实体,也许吧?
CategorySelected
----------------
Category Category { get; set; }
bool IsSelected { get; set;
我试图使用QueryOver找到答案,但没有成功.这甚至可以在“或多或少”的简单查询中实现吗?任何帮助深表感谢.谢谢!
米卡尔
解决方法:
实现这一目标的一种方法是创建条件SELECT语句.在SQL Server的情况下,我们想生成这样的东西
SELECT CASE CategoryId IN (.... subselect ) THEN 1 ELSE 0 END ...
但是由于NHibernate和抽象查询API,我们可以创建查询以在所有支持的DB方言中工作.
让我们尝试创建一个新解决方案的草案.我们将首先调整SubQuery
var subQuery = QueryOver.Of(() => cp)
.Select(Projections.Distinct(Projections.Property(() => cp.CategoryId)));
现在我们将创建条件语句
var isSelected = Projections.Conditional(
Subqueries.PropertyIn("Id", subQuery) // Category ID to be in the inner select
, Projections.Constant(1)
, Projections.Constant(0)
);
我们将该条件注入QueryOver并使用Transformers来正确填充Category的属性(包括虚拟IsSelected)
Category category = null
result = Session.QueryOver(() => cat)
// SELECT clause is now built
.SelectList(list => list
.Select(isSelected).WithAlias(() => category.IsSelected)
.Select(ca => ca.Id).WithAlias(() => category.Id)
... // all properites we would like to be populated
)
// Transform results into Category again
.TransformUsing(Transformers.AliasToBean<Category>())
.List<Category>();
现在,我们新的IsSelected属性(未映射,但仅用于此SELECT(投影))填充了正确的信息.
注意:这种方法有效,但这些陈述应作为草案.在您的情况下可能需要进行一些调整……
内容总结
以上是互联网集市为您收集整理的c# – NHibernate QueryOver – 检索全部,并标记已经“选中”的那些全部内容,希望文章能够帮你解决c# – NHibernate QueryOver – 检索全部,并标记已经“选中”的那些所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。