Tag: nhibernate queryover

NHibernate COALESCE问题

我试图用NHibernate表达以下SQL查询 DECLARE @date DATETIME = NULL; SELECT ER.Id , ER.DocumentDate FROM ExpenseReport ER WHERE ER.PeriodFrom >= COALESCE(@date, ER.PeriodFrom) OR ER.PeriodTo <= COALESCE(@date, ER.PeriodTo); 所以,在C#部分,我确实有以下类: 对于实体:ExpenseReport 对于我的搜索本身是一个单独的类 代码片段: // —– Entity class. public partial class ExpenseReport { public Nullable PeriodFrom { get; set; } // many other properties } // —– Search parameter class. public class […]

NHibernate用子查询计算另一个实体?

我有两个实体: User { UserGuid, Address, . . . EmailCount // This is not a column in the database, // I just wanna get the count number from the UserEmail table // and map the value to this property } UserEmail { UserGuid, Timestamp } 问题是如何通过NHibernate中的子查询获取电子邮件数量? 到目前为止,我有这个,但它不起作用。 任何的想法? User userEntity = null; var subQuery = QueryOver.Of() […]

使用表达式在NHibernate QueryOver中进行动态排序

给出以下QueryOver : UserProfile userProfileAlias = null; Pegfile pegfileAlias = null; var q = Session.QueryOver(() => pegfileAlias) .JoinAlias(() => pegfileAlias.UserProfile, () => userProfileAlias); 我想通过交换使以下语句动态化 q = q.OrderBy(() => userProfileAlias.Forename).Asc; (OrderBy(Expression<Func>或( OrderBy(Expression<Func>) ) 同 q = q.OrderBy(GetMemberExpression(userProfileAlias, “Forename”)).Asc; 我借了另一篇文章来获取 private Expression<Func> GetMemberExpression(UserProfile instance, string propertyName) { var arg = Expression.Constant(instance, typeof(UserProfile)); var body = Expression.Convert(Expression.PropertyOrField(arg, propertyName), typeof(UserProfile)); […]

QueryOver上的GroupBy SqlFunction

我有一个我使用的所有不同帐户名称前缀(az)的列表 var accounts = this.SessionManager.GetActiveSession().QueryOver(); var q = accounts.Select(Projections.Distinct( Projections.SqlFunction(“substring”, NHibernateUtil.String, Projections.Property(“Name”), Projections.Constant(1), Projections.Constant(1)))); 但是,我想要做的不是返回一个不同的列表,而是将前缀分组并返回以该前缀开头的帐户数,但我不确定如何使用查询来执行组,因为它不像标准那样简单LINQ。 我使用QueryOver而不是Query的原因是因为某些原因,子串函数正在内存中执行而不是在数据库服务器上执行。 这就是我通常会这样做的方式 var prefixes = (from acc in this.SessionManager.GetActiveSession().Query() group acc by acc.Name.Substring(0, 1) into grp select new { Prefix = grp.Key, Count = grp.Count() }); 编辑这是我尝试但我收到以下错误 表达式中无法识别的方法调用SqlFunction(“substring”,NHibernateUtil.String,new [] {Property(“Name”),Constant(Convert(1)),Constant(Convert(1))}) var accounts = this.SessionManager.GetActiveSession().QueryOver().Select( Projections.Group(x => Projections.SqlFunction(“substring”, NHibernateUtil.String, Projections.Property(“Name”), Projections.Constant(1), […]

Nhibernate QueryOver嵌套属性

是否有一种简单的方法可以将QueryOver与嵌套属性一起使用? 例如,我尝试这样的事情; // SPLAT! session.QueryOver().Where(Expression.Eq(“HomeBase.Name”, “Bat Cave”); 它无法工作,因为它无法解析SuperHero的属性’homebase.name’。 这是有道理的,但显然有一些方法可以使这项工作,因为如果我使用较旧的’查询’方法,我可以让它工作得很好,即 // The results I (technically) want. sess.Query().Where(x => x.HomeBase.Name == “The Bat Cave”); 那么我错过了什么? 我猜有一些方法可以将表达式等组合在一起,以使得nexted属性与QueryOver一起使用,但它们是什么?

Nhibernate – 在SelectList上列出

我正在使用NHibernate,我遇到了一个问题。 我的项目中有这些实体:客户端: public class Client { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string UserName { get; set; } public virtual string Password { get; set; } public virtual IList Dates { get; set; } public Client() { Dates = new List(); } } […]

Nhibernate Group By和Alias To Bean

我一直在努力将旧的查询翻译成Nhibernate。 我们正在将旧项目从Nhibernate 2升级到最新版本。 我使用QueryOver语法,因为Linq不是一个选项,因为查询的复杂性(同事的建议)。 我想查询DB(Oracle)以获得一些必须分组的结果。 结果我需要一个我的DTO的分组集合。 我也注意到nhibernate在转换为具有复杂属性的DTO时遇到了麻烦(嵌套DTO)为了解决这个问题,我找到了这个主题。 这很好用,但我不是魔术弦的粉丝…… 我将添加一些代码片段,了解我的怪物查询在这一刻的表现。 问题是我似乎无法弄清楚如何在不破坏其他所有内容的情况下添加组。 所以我想在一个属性上分组但在我的结果中仍然有DTO。 就像是: ILookup<int,IEnumerable> 欢迎任何帮助。 抱歉变量和类是荷兰语-_- SYNUITGAANDEBRIEF uitgaandebrief = null; SYNAANVRAAG joinedAanvraag = null; SYNDOSSIER joinedDossier = null; SYNVERBRUIKSADRES joinedVerbruiksAdres = null; SYNEAN joinedEan = null; SYNCTENERGIETYPE joinedEnergieType = null; SYNBRIEFBESTEMMELINGEN joinedBriefBestemmeling = null; SYNCTBRIEFTYPE joinedBriefType = null; SYNCTBRIEFSTATUS joinedBriefStatus = null; SYNCONTACTPERSOON joinedContactpersoon = null; […]

QueryOver的子查询

我在使用带查询的子查询时遇到问题。 这就是我所拥有的 var address = QueryOver.Of() .Where(x => x.City.IsLike(“%” + city + “%”)).Select(x => x.Person.Id); var result = Session.QueryOver() .Where(x => x.Type.IsLike(type + “%”)) .And(x => x.Name.IsLike(“%” + name + “%”)) .WithSubquery.WhereExists(address); 我有一个人的桌子,一个人有多个地方。 所以人的身份,姓名,类型 和地址将有PersonId和城市等。 因此,想要按名称和类型以及“地址”表中的“城市”搜索某个人

nHibernate QueryOver中的GROUP BY和HAVING子句

我正在尝试用nHibernate QueryOver语言编写这个特定的sql查询,我不是很熟悉: SELECT MessageThreadId FROM MessageThreadAccesses WHERE ProfileId IN (arr) GROUP BY MessageThreadId HAVING COUNT(MessageThreadId) = arr.Count 其中arr是一个整数数组(用户ID)我作为参数传递,而MessageThreadAccess实体如下所示: public virtual MessageThread MessageThread { get; set; } public virtual Profile Profile { get; set; } …. 在阅读了多个堆栈溢出线程并进行实验后,我得到了我的查询(尝试获取MessageThread对象 – 它应该总是只有一个或没有),但它仍然无法工作,我不确定还有什么可以尝试。 查询似乎总是返回MessageThreadAccess对象,但是当读取它的MessageThread属性时,它总是为NULL。 var access = Session.QueryOver() .WhereRestrictionOn(x => x.Profile).IsIn(participants.ToArray()) .Select(Projections.ProjectionList() .Add(Projections.Group(x => x.MessageThread)) ) .Where( Restrictions.Eq(Projections.Count(x => x.MessageThread.Id), […]

NHibernate中的项目集合

我可以在NHibernate中进行项目收集吗? 例如: User { UserGuid, IList UserGroups, } User userEntity = null; _session .StatefulSession.QueryOver(() => userEntity) .SelectList(list => list .Select(x => x.UserGuid).WithAlias(() => userEntity.UserGuid) //How can I project group collection here? .Select(x => x.Groups).WithAlias(() => userEntity.Groups) ) .TransformUsing(Transformers.AliasToBean()) .List();