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:
Gruß Tom
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