1

有什么方法可以比较 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

谢谢

4

1 回答 1

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);
于 2013-04-11T12:03:46.047 回答