Anonymous Types als Filter

Thomas Darimont

Erfahrenes Mitglied
Hallo,

hier mal ein Beispiel wie man die neuen Anonymous Types dazu benutzen kann um einen einfachen Filtermechanismus für NHibernate Criteria Queries zu implementieren:
C#:
using System;
using System.Collections.Generic;

using Spring.Data.NHibernate.Generic.Support;
using System.Reflection;
using NHibernate;
using NHibernate.Expression;

namespace De.Tutorials.Training
{
    public class Program
    {
        public static void Main(string[] args)
        {

            IGenericDAO genericDao = new GenericHibernateDAO();
            
            //Anonymous type als Filter expression
            IList<TestMock> testMocks = genericDao.FindBy<TestMock>(new { Data = "Test", Value = 24 });
        }
    }

    class TestMock{
        public string Data { get; set; }

        public int Value { get; set; }

        public override string ToString()
        {
            return string.Format("Data: {0} Value: {1}",Data,Value);
        }
    }

    interface IGenericDAO
    {

        /**
         * ...
         */

        IList<TEntity> FindBy<TEntity>(object attributes);


        /**
         * ...
         */
    }

    class GenericHibernateDAO : HibernateDaoSupport,IGenericDAO
    {
        #region IGenericDAO Members

        /**
         * ...
         */

        public IList<TEntity> FindBy<TEntity>(object attributes)
        {
            if (null != attributes)
            {
               return HibernateTemplate.ExecuteFind<TEntity>(delegate(ISession session)
                {
                    ICriteria criteria = session.CreateCriteria(typeof(TEntity));

                    foreach (PropertyInfo property in attributes.GetType().GetProperties())
                    {
                        criteria.Add(Property.ForName(property.Name).Eq(property.GetValue(attributes, new object[0])));
                    }

                    return criteria.List<TEntity>();
                });

              

            }
            return new List<TEntity>();
        }


        /**
         * ...
         */

        #endregion
    }
}

Gruß Tom
 
Zurück