You probably have outer join there.
In this case use DistinctRootEntityTransformer, to filter out duplicates.

Krzysztof


On 2010-05-18 03:19, Marco Antonio wrote:
Hi all,

I'm having a bad time with FindAll(ICriterion[]). Well, maybe I'm
doing something wrong too...that's more probably to happen. But,
anyway...

I have a method called FilterPostByRequest, in my webapplication. This
method extract all parameters from Request.QueryString and creates a
list of ICriterion to pass to FindAll method, so, it's suposed to
bring back, from database, all records that correspond to the filter.
In my database, the queried table, has 30 records...but when the app
execute the method (FindAll(ICriterion[])) it returns 41 records
(???)...something is not right. Can, anyone, help me with this
question?? Thanks!

Note...FindAll() (without parameters) returns 30 records, as expected.

I'm using MySql, AR 2.1.2, and my models, all collections (lists)
using lazy load.

The method (FilterPostByRequest)

private IEnumerable<Post>  FilterPostsByRequest(HttpRequestBase
request, bool onlyPublished)
{
        long categoryId = 0;
        string title = string.Empty;
        DateTime dateCreatedFrom = DateTime.MinValue;
        DateTime dateCreatedTo = DateTime.MinValue;
        State state = State.None;
        IList<ICriterion>  criterions = null;

        categoryId = request.QueryString.Get<long>("category.Id");
        title = request.QueryString.Get<string>("post.Title");
        dateCreatedFrom =
request.QueryString.Get<DateTime>("post.DateCreated.From");
        dateCreatedTo =
request.QueryString.Get<DateTime>("post.DateCreated.To");
        state = (State)request.QueryString.Get<int>("post.State");

        criterions = new List<ICriterion>();

        if (categoryId != 0)
                criterions.Add(Expression.Eq("Category.Id", categoryId));

        if (!string.IsNullOrEmpty(title))
                criterions.Add(Expression.InsensitiveLike("Title", title));

        if (dateCreatedFrom != DateTime.MinValue&&  dateCreatedTo !=
DateTime.MinValue)
                criterions.Add(Expression.Between("DateCreated", 
dateCreatedFrom,
dateCreatedTo));

        if (!onlyPublished)
        {
                if (state != State.None)
                        criterions.Add(Expression.Eq("State", state));
        }
        else
        {
                criterions.Add(Expression.Eq("State", State.Normal));
        }

        return Post.FindAll(criterions.ToArray()); // Database has 30
records, but this method return 41 (ex.). FindAll() works fine.
}

p.s.: sorry about the "bad english"! =)


--
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.

Reply via email to