Vit.Linq
3.0.1-preview
See the version list below for details.
dotnet add package Vit.Linq --version 3.0.1-preview
NuGet\Install-Package Vit.Linq -Version 3.0.1-preview
<PackageReference Include="Vit.Linq" Version="3.0.1-preview" />
<PackageVersion Include="Vit.Linq" Version="3.0.1-preview" />
<PackageReference Include="Vit.Linq" />
paket add Vit.Linq --version 3.0.1-preview
#r "nuget: Vit.Linq, 3.0.1-preview"
#addin nuget:?package=Vit.Linq&version=3.0.1-preview&prerelease
#tool nuget:?package=Vit.Linq&version=3.0.1-preview&prerelease
Vit.Linq
Vit.Linq provides two tools for handling Expressions: Filter and ExpressionTree.
- Filter can convert between FilterRule and Expression Predicate, allowing for dynamic filtering of result sets using JSON data.
- ExpressionTree facilitates the conversion between ExpressionNode and Expression, enabling transformations between data and code.
Note: Since non-primitive types cannot be transmitted via data formats, the conversion may not be fully equivalent, and some type information might be lost.
source address: https://github.com/VitormLib/Vit.Linq
Build | NuGet |
---|---|
Filter
FilterRule can express logical combinations (And / Or / Not) and basic logical evaluations (such as numerical comparisons / string matching / null checks, etc.). The complete set of features is as follows:
- And
- Or
- Not
- NotAnd
- NotOr
- Logical Judgement
- [object] is null (==null) / is not null (!=null)
- [numeric] compare: == != > >= < ⇐
- [string] compare: Contains NotContains StartsWith EndsWith IsNullOrEmpty IsNotNullOrEmpty
- [array] contains: In / NotIn
- custom operator
Example
Install necessary packages:
dotnet add package Vit.Linq
dotnet add package Vit.Core
Create console project and edit Program.cs
code address: Program.cs
using Vit.Core.Module.Serialization;
using Vit.Linq.Filter.ComponentModel;
using Vit.Linq;
namespace App
{
internal class Program
{
static void Main(string[] args)
{
var users = new[] { new { id = 1, name = "name1" }, new { id = 2, name = "name2" } };
var strRule = "{\"field\":\"id\", \"operator\": \"=\", \"value\": 1 }";
var rule = Json.Deserialize<FilterRule>(strRule);
var result = users.AsQueryable().Where(rule).ToList();
var count = result.Count;
}
}
}
FilterRule Format
FilterRule is JSON-formatted data where the condition can be
and
,or
,not
,notand
, ornotor
(a combination ofnot
andor
).
rules
can be nested FilterRules.
field
can be a nested property, such asid
orjob.name
.
operator
can be one of the following:IsNull
,IsNotNull
,In
,NotIn
,=
,!=
,>
,>=
,<
,<=
,Contains
,NotContains
,StartsWith
,EndsWith
,IsNullOrEmpty
,IsNotNullOrEmpty
, etc.
{
"condition": "and",
"rules": [
{
"field": "job.name",
"operator": "!=",
"value": "name987_job1"
},
{
"field": "name",
"operator": "IsNotNull"
},
{
"field": "name",
"operator": "NotIn",
"value": [
"name3",
"name4"
]
}
]
}
ExpressionTree
ExpressionTree enables the transformation between ExpressionNode (data) and Expression (code), allowing for data and code interchangeability. It supports all query-related expressions (excluding functionalities like Expression.Assign).
Example
Install necessary packages:
dotnet add package Vit.Linq
dotnet add package Vit.Core
Create console project and edit Program.cs
code address: Program.cs
using Vit.Core.Module.Serialization;
using Vit.Linq;
using Vit.Linq.ExpressionTree;
namespace App
{
internal class Program2
{
static void Main(string[] args)
{
var users = new[] { new User(1), new User(2), new User(3), new User(4)};
var query = users.AsQueryable();
var queryExpression = users.AsQueryable().Where(m => m.id > 0).OrderBy(m => m.id).Skip(1).Take(2);
#region #1 Expression to ExpressionNode (Code to Data)
var node = ExpressionConvertService.Instance.ConvertToData_LambdaNode(queryExpression.Expression);
var strNode = Json.Serialize(node);
#endregion
#region #2 ExpressionNode to QueryAction
var queryAction = new Vit.Linq.ExpressionTree.Query.QueryAction(node);
var strQuery = Json.Serialize(queryAction);
#endregion
// #3 compile code
var predicate = ExpressionConvertService.Instance.ConvertToCode_PredicateExpression<User>(queryAction.filter);
//var lambdaExp = (Expression<Func<Person, bool>>)convertService.ToLambdaExpression(queryAction.filter, typeof(User));
var rangedQuery = query.Where(predicate).OrderBy(queryAction.orders);
if (queryAction.skip.HasValue)
rangedQuery = rangedQuery.Skip(queryAction.skip.Value);
if (queryAction.take.HasValue)
rangedQuery = rangedQuery.Take(queryAction.take.Value);
var result = rangedQuery.ToList();
var count = result.Count;
}
class User
{
public User(int id) { this.id = id; this.name = "name" + id; }
public int id { get; set; }
public string name { get; set; }
}
}
}
Examples:
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Vit.Linq:
Package | Downloads |
---|---|
Vit.Orm.EntityFramework
entensions for EntityFramework |
|
Vitorm
Vitorm : simple orm |
|
Vitorm.ElasticSearch.QueryBuilder
Tool to convert FilterRule or ExpressionNode to ElasticSearch Query Request |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
3.1.5 | 1,770 | 11/4/2024 |
3.1.4 | 425 | 10/30/2024 |
3.1.3 | 503 | 10/10/2024 |
3.1.2 | 780 | 8/31/2024 |
3.1.1 | 462 | 8/29/2024 |
3.1.0 | 884 | 8/22/2024 |
3.0.3 | 758 | 8/8/2024 |
3.0.2 | 262 | 7/29/2024 |
3.0.1 | 427 | 7/22/2024 |
3.0.1-preview | 290 | 7/21/2024 |
3.0.0 | 314 | 7/14/2024 |
3.0.0-preview | 264 | 7/14/2024 |
2.2.25-preview | 235 | 7/14/2024 |
2.2.24-preview | 298 | 7/7/2024 |
2.2.23 | 140 | 7/3/2024 |
2.2.22 | 637 | 6/16/2024 |
2.2.21 | 231 | 2/2/2024 |
2.2.20 | 174 | 2/1/2024 |
2.2.19 | 190 | 1/31/2024 |
2.2.18 | 342 | 1/22/2024 |
2.2.17 | 204 | 1/19/2024 |
2.2.16 | 144 | 1/17/2024 |
2.2.15 | 149 | 1/17/2024 |
2.2.14 | 155 | 1/12/2024 |
2.2.13 | 264 | 12/21/2023 |
2.2.12 | 378 | 7/30/2023 |
2.2.11 | 356 | 5/19/2023 |
2.2.10 | 1,156 | 7/26/2022 |
2.2.10-preview6 | 350 | 4/5/2022 |
2.2.10-preview5 | 386 | 4/2/2022 |
2.2.9 | 1,352 | 2/19/2022 |
2.2.8 | 1,078 | 9/27/2021 |
2.2.7 | 1,173 | 9/9/2021 |
2.2.6 | 1,208 | 8/22/2021 |
2.2.5 | 890 | 8/21/2021 |
2.2.4 | 883 | 8/18/2021 |
2.2.2 | 1,323 | 6/5/2021 |
2.2.1.658 | 1,183 | 5/27/2021 |
2.2.0.635 | 1,201 | 5/20/2021 |
2.1.4.514 | 1,743 | 4/22/2021 |
2.1.3.499 | 1,798 | 4/20/2021 |
2.1.1.602 | 1,764 | 4/15/2021 |
2.1.1.499 | 1,681 | 2/22/2021 |
2.1.1.494 | 1,698 | 2/8/2021 |
2.1.1.487 | 1,703 | 2/7/2021 |
2.1.1.482 | 1,679 | 2/3/2021 |
2.1.1.478 | 1,785 | 2/2/2021 |
2.1.1.476 | 1,787 | 1/29/2021 |
2.1.1.461 | 1,767 | 1/22/2021 |
2.1.1.453 | 1,851 | 1/15/2021 |
2.1.1.425 | 1,105 | 11/24/2020 |
2.1.1.423 | 1,151 | 11/24/2020 |
2.1.1.419 | 1,181 | 11/11/2020 |
2.1.1.413 | 1,355 | 11/11/2020 |
2.1.1.410 | 1,212 | 10/12/2020 |
2.1.1.404 | 1,185 | 9/28/2020 |
2.1.1.392 | 1,364 | 9/16/2020 |
2.1.1.384 | 1,212 | 8/27/2020 |
2.1.1.378 | 1,413 | 8/8/2020 |
2.1.1.359 | 1,197 | 7/7/2020 |
2.1.1.352 | 1,310 | 6/17/2020 |
2.1.1.348 | 1,252 | 5/29/2020 |
2.1.1.345 | 1,381 | 5/6/2020 |
2.1.1.341 | 1,331 | 4/20/2020 |
2.1.1.334 | 1,312 | 4/10/2020 |
2.1.1.324 | 1,097 | 4/3/2020 |
2.1.1.322 | 1,324 | 4/1/2020 |
2.1.1.319 | 1,267 | 3/31/2020 |
2.1.1.318 | 1,265 | 3/25/2020 |
2.1.1.315 | 1,386 | 3/23/2020 |
2.1.1.312 | 1,278 | 3/17/2020 |
2.1.1.307 | 1,367 | 3/12/2020 |
2.1.1.304 | 1,305 | 3/10/2020 |
2.1.1.300 | 1,237 | 3/9/2020 |
2.1.1.296 | 1,281 | 3/4/2020 |
2.1.1.291 | 1,246 | 3/3/2020 |
2.1.1.290 | 1,516 | 3/2/2020 |
2.1.1.250 | 1,297 | 2/17/2020 |