https://github.com/xljiulang/predicatelib
谓词筛选表达式Expression<Func<T, bool>>的扩展库
https://github.com/xljiulang/predicatelib
expression expression-tree
Last synced: 10 months ago
JSON representation
谓词筛选表达式Expression<Func<T, bool>>的扩展库
- Host: GitHub
- URL: https://github.com/xljiulang/predicatelib
- Owner: xljiulang
- License: mit
- Created: 2019-03-27T07:55:55.000Z (almost 7 years ago)
- Default Branch: x
- Last Pushed: 2019-04-05T19:18:06.000Z (almost 7 years ago)
- Last Synced: 2025-04-12T22:05:01.259Z (10 months ago)
- Topics: expression, expression-tree
- Language: C#
- Size: 85 KB
- Stars: 44
- Watchers: 2
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PredicateLib
[PredicateLib](https://github.com/xljiulang/PredicateLib)是谓词筛选表达式Expression<Func<T, bool>>的一个扩展库,它可以帮你创建一个复杂且灵活的Expression<Func<T, bool>>,以作为EF、MongoDB Driver等ORM框架的查询条件。
> nuget
`PM> install-package PredicateLib`
### 1 Predicate的创建
#### 1.1 true或false Predicate
```c#
var predicate = Predicate.True();
```
> 表达式输出
```c#
item => true
```
#### 1.2 通过属性创建Predicate
```c#
var predicate = Predicate.Create("age", 2, Operator.GreaterThan);
```
> 表达式输出
```c#
item => (item.Age > 2)
```
### 2 Predicate的逻辑扩展
```c#
var predicate = Predicate
.True()
.And(item => item.Name == "laojiu");
if (true)
{
predicate = predicate.And(item => item.Age > 10 && item.Age < 20);
}
```
> 表达式输出
```c#
item => ((True AndAlso (item.Name == "laojiu")) AndAlso ((item.Age > 10) AndAlso (item.Age < 20)))
```
### 3 Condition转换为Predicate
Condition对象支持传入`IEnumerable>`,`IEnumerable`等类型作为条件项,然后转换为Predicate,适用于前端传入查询不确定的字段与值,后端不需要修改代码的需求。
```c#
var uri = new Uri("http://www.xx.com/?age=1&name=laojiu&id=001");
var condition = uri.AsCondition()
.OperatorFor(item => item.Age, Operator.GreaterThan)
.IgnoreFor(item => item.Id);
var predicate = condition.ToAndPredicate();
```
> 表达式输出
```c#
item => ((item.Age > 1) AndAlso item.Name.Contains("laojiu".Value))
```