You can easily do that by verifying whether the Criteria were already added
using the "GetCriteriaByAlias". Here's a piece of code we use to do
something similar:
if (searchCriteria.GetCriteriaByAlias(splitStrings[i]) == null)
{
searchCriteria =
searchCriteria.CreateCriteria(splitStrings[i], splitStrings[i]);
}
else
{
searchCriteria =
searchCriteria.GetCriteriaByAlias(splitStrings[i]);
}
On Thu, Nov 6, 2008 at 1:48 PM, Jimmy Shimizu <[EMAIL PROTECTED]>wrote:
>
> But I get the same error if I use CreateAlias aswell. I'm wondering if
> it's the way DetachedCriteria internally store aliases that makes a
> duplicate key violation?
>
> Ken Egozi wrote:
> > CreateCriteria creates a subcriteria and returns it
> > CreateAlias creates a subcritera, but returns the original (parent)
> > criteria
> > so, CreateAlias(..).Add(..) should work for you
> >
> > On Thu, Nov 6, 2008 at 1:18 PM, Jimmy Shimizu <[EMAIL PROTECTED]
> > <mailto:[EMAIL PROTECTED]>> wrote:
> >
> >
> > Isn't it possible to create a DetachedCriteria that joins table
> > multiple
> > times? I have tried doing this (What's the difference between
> > CreateCriteria and CreateAlias anyway?):
> >
> > var alias = "p" + i++;
> > criteria.CreateCriteria("Property", alias)
> > .Add(Expression.Eq(alias, p.Value));
> > }
> >
> > where alias is changeable and p is based on an enumeration.
> >
> >
> > However, I get this:
> > System.ArgumentException: An item with the same key has already
> > been added.
> > at System.ThrowHelper.ThrowArgumentException(ExceptionResource
> > resource)
> > at
> > System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue
> > value, Boolean add)
> > at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue
> value)
> > at NHibernate.Util.LinkedHashMap`2.Add(TKey key, TValue value)
> > at
> >
> NHibernate.Loader.Criteria.CriteriaQueryTranslator.CreateAssociationPathCriteriaMap()
> >
> > What I want to do is to select items based on if it has 1 or many
> > subitems in a collection. With a regular SQL statement I would
> > just join
> > in subitems for each subitem I want it to have, like this:
> >
> > select * from items
> > INNER JOIN subitems s1 ON s1.item_id = items.item_id AND s1.type =
> > 'foo'
> > INNER JOIN subitems s2 ON s2.item_id = items.item_id AND s2.type =
> > 'bar'
> > INNER JOIN subitems s3 ON s3.item_id = items.item_id AND s3.type =
> > 'foobar'
> >
> >
> > How would I replicate this behaviour using NHibernate/ActiveRecord?
> Or
> > is HQL the way to go?
> >
> >
> >
> >
> >
> >
> > --
> > Ken Egozi.
> > http://www.kenegozi.com/blog
> > http://www.musicglue.com
> > http://www.castleproject.org
> > http://www.gotfriends.co.il
> >
> > >
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Castle Project Users" 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/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---