NHibernate Linq查询中的通用参数

时间:2013-04-09 15:45:11

标签: .net linq nhibernate generics linq-to-nhibernate

有没有办法比较linq查询中的泛型类型以使用NHibernate转换为SQL?

这样的事情:

public abstract class DataProviderBase<TDAO, TId>
{
    protected ISession Session;

    public virtual TDAO GetById(TId id)
    {
        var allItems = GetAllQuery();  // gives me query, usually Session.Query<TDAO>();
        var res = allItems.SingleOrDefault(item => item.Id == id);
            // !!! Operator '==' cannot be applied to operands of type 'TId' and 'TId'
        return res;
    }

    protected virtual IQueryable<TDAO> GetAllQuery()
    {
        var query = Session.Query<TDAO>();
        return query;
    }
}

我知道我可以使用Session.Get<TDAO>(id);,但这不是我想要的。 GetAllQuery()是一种虚拟方法,我希望能够覆盖它。

  • NHibernate 版本:3.3.3.4000
  • NHibernate.Linq 版本:1.0

由于

1 个答案:

答案 0 :(得分:1)

您可以动态创建谓词。例如:

var parameter = Expression.Parameter(typeof (TDAO));
var predicate = Expression.Lambda<Func<TDAO, bool>>(
    Expression.Equal(Expression.Property(parameter, "Id"),
                     Expression.Constant(id)),
    parameter);
var res = allItems.SingleOrDefault(predicate);