最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言:

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

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

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

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

舉例:

創(chuàng)建Asp.Net Core Web API項目,引用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)擴展方法,可以根據(jù)高級查詢條件進(jìn)行數(shù)據(jù)篩選。

運行程序,可以在Swagger UI看到如下圖: 

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

結(jié)論:

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

但是,??AutoFilterer.Generators??只能提供簡單的范圍篩選:

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

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

舉例:

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

并在WeatherForecastController.cs頭部添加:

using System.Linq.Dynamic.Core;

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

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

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.實現(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??指定實際返回的類型,以便Swagger頁面能顯示正確:

?3.實現(xiàn)擴展方法?

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

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

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.效果?

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

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

結(jié)論:

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

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

相關(guān)文章

最新評論

商城县| 鹤庆县| 怀远县| 常德市| 黑水县| 千阳县| 和田市| 乐至县| 浦城县| 岳阳县| 和林格尔县| 额济纳旗| 威海市| 曲靖市| 布尔津县| 和龙市| 永寿县| 罗平县| 阿城市| 昌江| 静乐县| 岳池县| 若羌县| 武川县| 南乐县| 太仓市| 兴业县| 兴义市| 宝山区| 凤山县| 永新县| 舟曲县| 莒南县| 栾城县| 繁昌县| 阿图什市| 阿鲁科尔沁旗| 收藏| 微山县| 漳州市| 阿克陶县|