我有以下内容:
IQueryable<Post> posts = _context.Posts;
String rank = "1";
posts = posts.Where(x => x.Rank == rank);
我想创建一个Where扩展名,以便像这样使用它:
posts = posts.Where(x => x.Rank, rank);
哪个会转换为posts.Where(x => x.Rank == rank)
。
我正在传递要应用的属性(x.Rank)和规则(等级)
我使用它的原因是因为排名规则可能是:
[minRank;maxRank], [;maxRank], [minRank;], etc.
所以我将基于一组规则构建查询。例如:
// [minRank;maxRank]:
posts = posts.Where(x => x.Rank >= minRank && x.Rank <= maxRank);
// [;maxRank]:
posts = posts.Where(x => x.Rank <= maxRank);
我计划添加更多规则。
我正在考虑构建查询的步骤是:
1.解析规则信息;
2.检查哪个规则类型(等于,范围,...)
3.检查x.Rank的类型
4.使用该属性为该规则创建Where查询。
答案 0 :(得分:1)
这个怎么样:
public static class Extentions
{
public static IQueryable<T> Where<T, P>(this IQueryable<T> self, Func<T, P> selector, P value)
where P : IComparable
{
return self.Where(x => selector(x).CompareTo(value) >= 0);
}
}