有没有办法比较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()
是一种虚拟方法,我希望能够覆盖它。
由于
答案 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);