欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ynamic LINQ創(chuàng)建高級(jí)查詢服務(wù)

 更新時(shí)間:2022年03月14日 16:34:45   作者:My IO  
這篇文章主要介紹了ynamic LINQ創(chuàng)建高級(jí)查詢服務(wù),如何使用Dynamic LINQ輕松實(shí)現(xiàn)更強(qiáng)大的高級(jí)查詢服務(wù),下面文章內(nèi)容具有一的的參考價(jià)值,需要的小伙伴可以參考一下

前言:

在業(yè)務(wù)開發(fā)中,一個(gè)常用的功能就是“高級(jí)查詢”,就是客戶可以根據(jù)自己的需要設(shè)置查詢條件查找數(shù)據(jù),類似下圖: 

通常,我們需要為每個(gè)“高級(jí)查詢”定制Dto類,用于傳輸條件,并要根據(jù)條件組合成查詢語(yǔ)句執(zhí)行數(shù)據(jù)庫(kù)查詢操作,費(fèi)時(shí)費(fèi)力。

現(xiàn)在,使用AutoFilterer.Generators可以輕松實(shí)現(xiàn)上述功能。

一、創(chuàng)建高級(jí)查詢服務(wù)

舉例:

創(chuàng)建Asp.Net Core Web API項(xiàng)目,引用Nuget包AutoFilterer.Generators。

WeatherForecast類上添加GenerateAutoFilterAttribute:

[GenerateAutoFilter]
public class WeatherForecast
{
? ? public DateTime Date { get; set; }

? ? public int TemperatureC { get; set; }

? ? public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

? ? public string Summary { get; set; }
}

然后,修改WeatherForecastController.cs的Get方法,增加WeatherForecastFilter參數(shù):

[HttpGet]:

public IEnumerable<WeatherForecast> Get([FromQuery]WeatherForecastFilter filter)
{
? ? var rng = new Random();
? ? // Change range to 100 from 5 to get more reasonable results.
? ? return Enumerable.Range(1, 100).Select(index => new WeatherForecast
? ? {
? ? ? ? Date = DateTime.Now.AddDays(index),
? ? ? ? TemperatureC = rng.Next(-20, 55),
? ? ? ? Summary = Summaries[rng.Next(Summaries.Length)]
? ? })
? ? .AsQueryable().ApplyFilter(filter)//使用filter
? ? .ToArray();
}

AutoFilterer.Generators提供了IQueryable.ApplyFilter(filter)擴(kuò)展方法,可以根據(jù)高級(jí)查詢條件進(jìn)行數(shù)據(jù)篩選。

運(yùn)行程序,可以在Swagger UI看到如下圖: 

現(xiàn)在,“高級(jí)查詢”服務(wù)已經(jīng)完成了。你可以傳入最小最大值范圍,排序方式,分頁(yè)方式。

結(jié)論:

AutoFilterer.Generators提供了很便利的方式實(shí)現(xiàn)“高級(jí)查詢”,如果大家有類似的業(yè)務(wù)需求,可以試一下

但是,??AutoFilterer.Generators??只能提供簡(jiǎn)單的范圍篩選:

今天,我們介紹如何使用Dynamic LINQ輕松實(shí)現(xiàn)更強(qiáng)大的高級(jí)查詢服務(wù)。

二、使用Dynamic LINQ創(chuàng)建高級(jí)查詢服務(wù)

舉例:

創(chuàng)建ASP.NET Core Web API項(xiàng)目,引用Nuget包??System.Linq.Dynamic.Core??。

并在WeatherForecastController.cs頭部添加:

using System.Linq.Dynamic.Core;

?1.定義查詢參數(shù)?

創(chuàng)建??DynamicLinqDto??,用于傳遞返回字段、查詢條件、排序方式、分頁(yè)方式等:

public class DynamicLinqDto
{
? ? public string Fields { get; set; }

? ? public string Filter { get; set; }

? ? public string OrderBy { get; set; }
? ? ? ??
? ? public int? PageNo { get; set; }

? ? public int? PageSize { get; set; }
}

?2.實(shí)現(xiàn)查詢方法?

修改默認(rèn)的Get方法如下:

[HttpGet]:

[ProducesDefaultResponseType(typeof(WeatherForecast))]
public IEnumerable<dynamic> Get([FromQuery] DynamicLinqDto dto)
{
? ? var rng = new Random();
? ? IQueryable query = Enumerable.Range(1, 5).Select(index => new WeatherForecast
? ? {
? ? ? ? Date = DateTime.Now.AddDays(index),
? ? ? ? TemperatureC = rng.Next(-20, 55),
? ? ? ? Summary = Summaries[rng.Next(Summaries.Length)]
? ? })
? ? .AsQueryable();

? ? return query.ToDynamicArray(dto);
}

由于Get方法的返回類型是IEnumerable,因此需要使用??ProducesDefaultResponseTypeAttribute??指定實(shí)際返回的類型,以便Swagger頁(yè)面能顯示正確:

?3.實(shí)現(xiàn)擴(kuò)展方法?

上面最關(guān)鍵的代碼是??ToDynamicArray??方法。

實(shí)際上,這是我們封裝的擴(kuò)展方法,對(duì)于任意??IQueryable??對(duì)象,實(shí)現(xiàn)高級(jí)查詢:

public static class DynamicLinqExtentions
{
? ? public static dynamic[] ToDynamicArray(this IQueryable query, DynamicLinqDto dto)
? ? {
? ? ? ? if (!string.IsNullOrWhiteSpace(dto.Fields))
? ? ? ? {
? ? ? ? ? ? query = query.Select($@"new({dto.Fields})");
? ? ? ? }

? ? ? ? if (!string.IsNullOrWhiteSpace(dto.Filter))
? ? ? ? {
? ? ? ? ? ? query = query.Where(dto.Filter);
? ? ? ? }

? ? ? ? if (!string.IsNullOrWhiteSpace(dto.OrderBy))
? ? ? ? {
? ? ? ? ? ? query = query.OrderBy(dto.OrderBy);
? ? ? ? }

? ? ? ? var pageNo = dto.PageNo ?? 1;
? ? ? ? var pageSize = dto.PageSize ?? 10;
? ? ? ? query = query.Page(pageNo, pageSize);

? ? ? ? return query.ToDynamicArray();
? ? }
}

?4.效果?

運(yùn)行程序,傳入指定的參數(shù)并執(zhí)行:

可以看到,現(xiàn)在,“高級(jí)查詢”服務(wù)已經(jīng)完成了:

結(jié)論:

可以看到Dynamic LINQ LINQ 使實(shí)現(xiàn)起來(lái)相當(dāng)容易,詳細(xì)參數(shù)說(shuō)明請(qǐng)參看官方文檔

到此這篇關(guān)于ynamic LINQ創(chuàng)建高級(jí)查詢服務(wù)的文章就介紹到這了,更多相關(guān)ynamic LINQ創(chuàng)建高級(jí)查詢服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論