QueryOver is not Linq provider. btw we can visit the Expression and convert 'x.User == null' with IsNull restriction.
2010/4/4 Diego Mijelshon <[email protected]> > While someone used to Criteria might find it reasonable, it would be > extremely frustrating for a new user to find out that: > > session.Query<Theme>().Where(x => x.User == null).SingleOrDefault(); > > does exactly what he wants, but: > > session.QueryOver<Theme>().Where(x => x.User == null).SingleOrDefault(); > > does not. > > I'm CC'ing to the dev list... I belive this deserves some discussion. > > Diego > > > > On Sun, Apr 4, 2010 at 05:56, Richard Brown (gmail) < > [email protected]> wrote: > >> Hi Jim, >> >> It's not a bug, it's by design. The QueryOver API uses the explicit >> Restrictions.IsNull for that construct, so you need to do something like: >> >> return >> _session.QueryOver<Theme>() >> .Where(t => t.Name == name) >> .And(Restrictions.Or( >> Restrictions.On<Theme>(t => t.User).IsNull, >> Restrictions.Where<Theme>(t => t.User == user)) >> .SingleOrDefault(); >> >> >> http://216.121.112.228/browse/NH-2152 >> >> This is a not uncommon request, however the opaqueness of the API is >> deliberate (the API is meant to mirror the way SQL will be generated, not >> hide it from the user). In addition, this is the way that ICriteria behaves >> (which QueryOver is built upon). >> >> I have changed the existing issue to a feature request. Please vote for >> the issue, and I'll see how much work it is to implement the feature. >> >> Cheers, >> Richard >> >> >> *From:* Diego Mijelshon <[email protected]> >> *Sent:* Saturday, April 03, 2010 10:42 PM >> *To:* nhusers <[email protected]> >> *Subject:* Re: [nhusers] QueryOver - Emits "MyProperty = null" instead of >> "MyProperty is null" >> >> It looks like a bug... or a very non-intuitive behavior. >> You should open an Issue at http://jira.nhforge.org/ >> >> Diego >> >> >> On Sat, Apr 3, 2010 at 18:03, Jim Geurts <[email protected]> wrote: >> >>> Hey guys, >>> >>> I'm using the QueryOver api like: >>> >>> private Theme GetThemeByName(string name, User user) { >>> return _session.QueryOver<Theme>().Where(x => x.Name == name && >>> (x.User == null || x.User == user)).SingleOrDefault(); >>> } >>> >>> >>> Behind the scenes, it is generating sql similar to: >>> >>> SELECT this_.ThemeId as ThemeId7_0_, >>> this_.Name as Name7_0_, >>> this_.UserId as UserId7_0_ >>> FROM pm_Themes this_ >>> WHERE this_.IsDeleted = 0 /* @p0 */ >>> and (this_.Name = 'Test Theme-asfdyT6W' /* @p1 */ >>> and (this_.UserId = NULL /* @p2 */ >>> or this_.UserId = 691 /* @p3 */)) >>> >>> You'll notice that it uses an equal sign instead of the keyword "is" >>> for the UserId check. I'm using the MsSql2008Dialect dialect. Is >>> this an nhibernate configuration issue, a bug on my end, or a bug with >>> the QueryOver api? >>> >>> Thanks >>> >>> Jim >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "nhusers" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]<nhusers%[email protected]> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/nhusers?hl=en. >>> >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "nhusers" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<nhusers%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/nhusers?hl=en. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "nhusers" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<nhusers%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/nhusers?hl=en. >> > > -- Fabio Maulo -- To unsubscribe, reply using "remove me" as the subject.
