public IQueryable<T> All()
{
var session = _sessionFactory.GetCurrentSession();
return FilterByClientId(from r in session.Query<T>() select r);
}
public IQueryable<T> FilterByClientId(IQueryable<T> queryable)
{
return queryable.Where(row => _clientIds.ClientIds.Contains<long>(row.ClientId) );
}
我可以在方法上使用自定义属性来处理装饰吗?结果代码看起来像这样。使用ClientFilter调用All方法会自动修饰结果。
[ClientFilter]
public IQueryable<T> All()
{
var session = _sessionFactory.GetCurrentSession();
return from r in session.Query<T>() select r;
}
答案 0 :(得分:1)
您正在寻找PostSharp,它允许您使用属性修改方法行为。
然而,它会增加极大的复杂性,并且可能不值得这么简单。
答案 1 :(得分:0)
如果我理解你在问什么,那么答案可能是肯定的,但使用属性的复杂性并不值得。将您的第二个代码示例简单地如下所示不是更简单吗?
// Edited to make more sense, but see below...
public IQueryable<T> FilterByClientId()
{
return All().Where(row => _clientIds.ClientIds.Contains<long>(row.ClientId) );
}
编辑:根据您的评论,尝试将FilterByClientId定义为具有通用约束的扩展方法:
public static IQueryable<T> FilterByClientId(this IQueryable<T> queryable) where T : IHasClientId
{
return queryable.Where(row => _clientIds.ClientIds.Contains<long>(row.ClientId) );
}