I have this problem too.

Im not sure how it relates to http://216.121.112.228/browse/NH-2010

I have recently upgraded to nhibernate 3 and at the same time switched
from linq to nhibernate to nhibernates own linq namespace.

I have a suite of tests set up and ran them and many began to fail

I have tracked it down to a simmilar issue to what you have said
above.

I pass in a bool variable in to my method - active.

and then do .Where(x => x.Active == active)

This way if i want active ones i can get them, and if i want inactive
ones, then it will get those.

I get Unable to cast object of type 'System.Boolean' to type
'System.String'

As a temporary mesure, i have had to conditionally set Where(x =>
x.Active) or Where(x => !x.Active) to make this work.

>From reading the above linked bug report, im not sure how they relate?
Is this definately the same problem?

On Jan 18, 7:05 am, jokedst <[email protected]> wrote:
> Ok, I had a really hard to track down problem, and I couldn't find
> anything about it on the net so I thought I'd post it here. This is
> related to bug NH-2010 in JIRA, but it doesn't explain how to fix it,
> so here goes:
>
> I repeatedly got this error:
> System.InvalidCastException:Unabletocastobjectoftype
> 'System.Boolean' totype'System.String'.
>    at NHibernate.Type.AbstractStringType.ToString(Objectval) in d:
> \CSharp\NH\nhibernate\src\NHibernate\Type\AbstractStringType.cs:line
> 32
>    at NHibernate.Type.NullableType.ToLoggableString(Objectvalue,
> ISessionFactoryImplementor factory) in d:\CSharp\NH\nhibernate\src
> \NHibernate\Type\NullableType.cs:line 109
>    at NHibernate.Impl.Printer.ToString(IDictionary`2 namedTypedValues)
> in d:\CSharp\NH\nhibernate\src\NHibernate\Impl\Printer.cs:line 68
>    at NHibernate.Cache.QueryKey.ToString() in d:\CSharp\NH\nhibernate
> \src\NHibernate\Cache\QueryKey.cs:line 216
>    at NHibernate.Caches.SysCache2.SysCacheRegion.GetCacheKey(Object
> identifier)
>
> It tried tocasta bool to a string (e.g. "something =
> (string)theBool"). You can't do that.
>
> The problem was this string:
>             queryable = queryable.Where(x => x.IsInvoiceToSupplier ==
> false);
>
> It's not the "IsInvoiceToSupplier" that's the problem - it's the
> "false"! It works when you write it like this:
>             queryable = queryable.Where(x => !x.IsInvoiceToSupplier);
>
> Also, this:
>                         queryable = queryable.Where(x =>
> x.IsInvoiceToSupplier == true);
> should be like this:
>                         queryable = queryable.Where(x =>
> x.IsInvoiceToSupplier);
>
> You'd think it'd generate the exact same bytecode, but nooo....
>
> So we need to be really careful with what we put in the "Where" clause
> on IQueryable:s.
>
> Note that this problem only shows up if you have debug logging enabled
> or if you use query caching since the query cache key is generated
> from the generated text query.
>
> I suppose this in not technically a bug in NHibernate, but rather how
> linq works and the interactions between them, but it was still a hard
> bug to track down.

-- 
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].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to