A SUM with no rows returns null in SQL. You are trying to cast NULL to a non-nullable type. That's what causes the exception. Automagically transforming null to 0 would be a bug. Yes, this is not what happens with LINQ to objects. But LINQ is a leaky abstraction.
Diego On Mon, Mar 31, 2014 at 11:25 AM, Mouhong Lin <[email protected]> wrote: > but make it returns 0 and not throwing exception is not "surprise" right? > but the exception is "surprise". If in EF user use the same workaround, > when he turn to NH, that workaroud is still working, so it doesn't break > anything, so there's no "surprise". > 2014-3-31 下午9:56于 "Stephen Bohlen" <[email protected]>写道: > >> I don't think its technically 'broken'. As you can see from the comments >> in the JIRA issue, the final design decision was to mimic the behavior of >> sim. LINQ statements in other ORMs in the .NET space for the sake of >> consistency and so as not to violate "the principle of least-surprise". >> >> If that behavior isn't what you seek for your use-case, then you are >> certainly free to apply the work-arounds discussed. If you don't like the >> "ugly" syntax this produces in your code, then I recommend you create an >> extension method of your own ( perhaps "IEnumerable.NullSafeSum(...)" ?) >> and invoke that instead. >> >> Cheers, >> >> Steve Bohlen >> [email protected] >> http://blog.unhandled-exceptions.com >> http://twitter.com/sbohlen >> >> >> On Mon, Mar 31, 2014 at 1:03 AM, Mouhong Lin <[email protected]>wrote: >> >>> I already know that workaround before I created this post. >>> I mean why this is treat as "by design" behavior and not plan to fix it. >>> That's why I posted it here instead of the nhusers groupd. >>> >>> >>> On Monday, March 31, 2014 4:14:16 AM UTC+8, Ricardo Peres wrote: >>>> >>>> var total = query.Sum(x => (double?) x.Income); >>>> >>>> Replace double for single, int, long, etc. >>>> >>>> By the way, the proper place to ask questions is the nhusers mailing >>>> list, not this one. >>>> >>>> RP >>>> >>>> On Sunday, March 30, 2014 4:42:24 PM UTC+1, Mouhong Lin wrote: >>>>> >>>>> Hi guys, >>>>> >>>>> I get an exception saying "Value cannot be null" when i execute this >>>>> query (NH 3.3.3): >>>>> >>>>> var total = query.Sum(x => x.Income); >>>>> >>>>> The exception happens when the query returns no result. >>>>> I found there's already a Jira issue about this: >>>>> https://nhibernate.jira.com/browse/NH-3113 >>>>> >>>>> But why won't fix? It's really not usable if this query throws >>>>> exception. In every application that need to do reporting will encounter >>>>> this. >>>>> And this violate the semantic of the sum and linq to objects, right? >>>>> If this should throw exception, why query.Count() don't throws? >>>>> (I understand the technical reason of this, just saying why the >>>>> semantic of these are not consistent) >>>>> >>>>> If L2S or EF behaves the same, I think it's their bug. Not because >>>>> it's a good thing. >>>>> Workaounds like this "var sum = myQuery.Sum(x => (int?)x.Prop) ?? 0" make >>>>> my code really ugly. >>>>> >>>>> Ideas? >>>>> >>>>> >>>>> >>>>> ------------------------------ >>>>> Mouhong >>>>> >>>>> -- >>> >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "nhibernate-development" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "nhibernate-development" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/nhibernate-development/o5orsYz7Ums/unsubscribe >> . >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> >> For more options, visit https://groups.google.com/d/optout. >> > -- > > --- > You received this message because you are subscribed to the Google Groups > "nhibernate-development" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- --- You received this message because you are subscribed to the Google Groups "nhibernate-development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
