亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ynamic?LINQ如何創建高級查詢服務

發布時間:2022-03-15 09:13:07 來源:億速云 閱讀:183 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關ynamic LINQ如何創建高級查詢服務,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

前言:

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

ynamic?LINQ如何創建高級查詢服務

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

現在,使用AutoFilterer.Generators可以輕松實現上述功能。

一、創建高級查詢服務

舉例:

創建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參數:

[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)擴展方法,可以根據高級查詢條件進行數據篩選。

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

ynamic?LINQ如何創建高級查詢服務

現在,“高級查詢”服務已經完成了。你可以傳入最小最大值范圍,排序方式,分頁方式。

結論:

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

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

ynamic?LINQ如何創建高級查詢服務

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

二、使用Dynamic LINQ創建高級查詢服務

舉例:

創建ASP.NET Core Web API項目,引用Nuget包System.Linq.Dynamic.Core。

并在WeatherForecastController.cs頭部添加:

using System.Linq.Dynamic.Core;

1.定義查詢參數

創建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.實現查詢方法

修改默認的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頁面能顯示正確:

ynamic?LINQ如何創建高級查詢服務

3.實現擴展方法

上面最關鍵的代碼是ToDynamicArray方法。

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

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

運行程序,傳入指定的參數并執行:

ynamic?LINQ如何創建高級查詢服務

可以看到,現在,“高級查詢”服務已經完成了:

ynamic?LINQ如何創建高級查詢服務

關于“ynamic LINQ如何創建高級查詢服務”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永仁县| 自治县| 临沧市| 灵武市| 平塘县| 万载县| 康保县| 丰顺县| 阿图什市| 株洲市| 贵德县| 通化县| 封丘县| 大邑县| 松桃| 基隆市| 兴海县| 大厂| 商洛市| 广灵县| 平陆县| 临城县| 化隆| 公主岭市| 额尔古纳市| 江西省| 福海县| 岑巩县| 湖北省| 高阳县| 巫山县| 怀安县| 玉林市| 巨鹿县| 韶山市| 阿合奇县| 大悟县| 伊吾县| 南皮县| 洪湖市| 贺州市|