动态查询中的条件

时间:2016-06-10 09:44:01

标签: c# entity-framework

我有以下内容:

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查询。

1 个答案:

答案 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);
    }
}