国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄EF 排序配上自定義的比較器

這篇具有很好參考價(jià)值的文章主要介紹了記錄EF 排序配上自定義的比較器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

記錄EF 排序配上自定義的比較器

前言

要求頁面文件顯示的時(shí)候能夠按照序號(hào)去排序要求如下:

數(shù)據(jù)庫有一個(gè)列存放文件名,如:

  • 1.1文件
  • 1.2文件
  • 1.1.1文件
  • 1.1.11文件1.0.txt
  • 1.1.2(文件).pdf

現(xiàn)在需要實(shí)現(xiàn)查詢的時(shí)候按照這個(gè)列排序,并且是按照序號(hào)排序。

查詢的時(shí)候是按層級(jí)查詢的,每次查詢只會(huì)當(dāng)前所在層,1 文件夾、2文件夾、3文件,然后進(jìn)入1 文件夾 才會(huì)查詢出 1.1文件..1.2文件夾,這沒什么影響,主要實(shí)現(xiàn)的功能就是我查詢的時(shí)候要排序,如果直接根據(jù)列名OrderBy是沒用的,所以需要用到EF的自定義比較器,通過自己編寫比較邏輯去完成排序。

代碼實(shí)現(xiàn)

首先是Compare 方法中的 xy 參數(shù)分別表示當(dāng)前列的數(shù)據(jù)和當(dāng)前列的下一個(gè)數(shù)據(jù)。

假設(shè)查詢出來的數(shù)據(jù)第一條和第二條比對(duì)

  • x:1.11文件
  • y:1.1文件.pdf

這2個(gè)參數(shù)會(huì)進(jìn)入GetFileNumber方法中將最前面的序號(hào)提取出來。

CompareTo方法會(huì)按照字典順序進(jìn)行比較。對(duì)于數(shù)字類型,CompareTo方法會(huì)按照數(shù)值大小進(jìn)行比較。

  • 如果返回值為負(fù)數(shù)(例如-1),表示第一個(gè)對(duì)象(x)小于第二個(gè)對(duì)象(y)。
  • 如果返回值為零,表示兩個(gè)對(duì)象相等。
  • 如果返回值為正數(shù)(例如1),表示第一個(gè)對(duì)象(x)大于第二個(gè)對(duì)象(y)。

EF 在進(jìn)行排序時(shí),會(huì)根據(jù) Compare 方法返回的整數(shù)值來確定對(duì)象的相對(duì)順序。根據(jù)返回值的正負(fù)來決定對(duì)象的位置。

public int Compare(string x, string y)
{
    // 解析文件名中的數(shù)字部分
    int fileNumberX = GetFileNumber(x);
    int fileNumberY = GetFileNumber(y);

    // 比較數(shù)字部分
    int result = fileNumberX.CompareTo(fileNumberY);

    if (result == 0)
    {
    // 如果數(shù)字部分相同,則按照完整文件名進(jìn)行比較
    result = x.CompareTo(y);
    }

    return result;
}        

通過傳遞文件名,使用正則表達(dá)式去匹配文件名中的序號(hào)部分,獲取到1.1.1之后,在進(jìn)行.去切割獲取最后面的數(shù)字,然后返回回去,回到上面的Compare方法去比對(duì)文件名序號(hào)大小。

private int GetFileNumber(string fileName)
{
    // 假設(shè)文件名的格式為數(shù)字序號(hào) + "." + 文件類型(例如:1.1.1文件.pdf)
    // 提取數(shù)字序號(hào)部分
    try
    {
        // 使用正則表達(dá)式提取數(shù)字序號(hào)部分
        string pattern = @"(\d+(\.\d+)*)";
        Match match = Regex.Match(fileName, pattern);

        MatchCollection matches = Regex.Matches(fileName, pattern);

        if (matches.Count > 0)
        {
            string firstNumberPart=matches[0].Groups[1].Value;

            // 提取最后面的數(shù)字
            string[] parts = firstNumberPart.Split('.');
            int lastPartIndex = parts.Length - 1;
            int lastPart = int.Parse(parts[lastPartIndex]);
            return lastPart;
        }

        // 如果無法解析數(shù)字序號(hào),則返回一個(gè)默認(rèn)值或拋出異常,具體根據(jù)您的需求來處理
        // 這里返回一個(gè)負(fù)數(shù)作為默認(rèn)值
        return -1;
    }
    catch
    {
        return -1;
    }
}
}            

最關(guān)鍵的是需要實(shí)現(xiàn) IComparer 接口的自定義比較器類,用于對(duì)字符串進(jìn)行比較,上面的CompareGetFileNumber寫在方法內(nèi)部即可。

public class FileNameComparer : IComparer<string>
{
     ...//上面的2給方法都要放在這里面
}

使用起來也很簡單,注意列名需要是字符串類型的。

db.表名.OrderBy(s => s.列名,new FileNameComparer());

結(jié)尾

EF自定義比較器可以進(jìn)行排序、查找、去重等操作,同時(shí)支持實(shí)體對(duì)象和字符串進(jìn)行比較操作,可以去看看官方文檔的介紹:

IComparer 接口:https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.icomparer?view=net-7.0

OrderBy:https://learn.microsoft.com/zh-cn/dotnet/api/system.data.entity.core.common.commandtrees.expressionbuilder.dbexpressionbuilder.orderby?view=entity-framework-6.2.0文章來源地址http://www.zghlxwxcb.cn/news/detail-711407.html

到了這里,關(guān)于記錄EF 排序配上自定義的比較器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用java.lang.Comparable實(shí)現(xiàn)比較器和使用java.util.Collections排序

    記錄 :469 場(chǎng)景 :使用java.lang.Comparable實(shí)現(xiàn)比較器,使用java.util.Collections排序,實(shí)現(xiàn)找出最大值。 版本 :JDK 1.8,Spring?Boot 2.6.3,fastjson-2.0.33。 1.一個(gè)JSON字符串,找出最大值 1.1JSON字符串 1.2解析 把JSON字符串轉(zhuǎn)換是JSONArray類型,把值取出轉(zhuǎn)換為獨(dú)立對(duì)象,再做比較。 2.使用java.

    2024年02月15日
    瀏覽(51)
  • Java ---比較器

    ? ? ? 我們知道基本數(shù)據(jù)類型的數(shù)據(jù)(除 boolean 類型外)需要比較大小的話,之間使用比較運(yùn)算符即可,但是引用數(shù)據(jù)類型是不能直接使用比較運(yùn)算符來比較大小的。那么,如何解決這個(gè)問題呢? ? ? ?在 Java 中經(jīng)常會(huì)涉及到對(duì)象數(shù)組的排序問題,那么就涉及到對(duì)象之間的比

    2024年02月03日
    瀏覽(25)
  • 認(rèn)識(shí)比較器

    Java中比較器是排序、加入有序數(shù)組等操作的時(shí)候必須要有的,沒有的話會(huì)報(bào)錯(cuò),例如下面這段代碼: 運(yùn)行時(shí)會(huì)發(fā)生下面的異常 Exception in thread \\\"main\\\" java.lang.ClassCastException: dataStructure.heap.Student cannot be cast to java.lang.Comparable ?? ?at java.util.ComparableTimSort.countRunAndMakeAscending(Compar

    2023年04月25日
    瀏覽(22)
  • 8.2 電壓比較器(1)

    8.2 電壓比較器(1)

    電壓比較器是對(duì)輸入信號(hào)進(jìn)行鑒幅與比較的電路,是組成非正弦波發(fā)生電路的基本單元電路,在測(cè)量和控制中有著相當(dāng)廣泛的應(yīng)用。 1、電壓比較器的電壓傳輸特性 電壓比較器的輸出電壓 u O u_{scriptscriptstyle O} u O ? 與輸入電壓 u I u_{scriptscriptstyle I} u I ? 的函數(shù)關(guān)系 u O = f

    2024年02月11日
    瀏覽(28)
  • 一位比較器【模電實(shí)驗(yàn)】

    一位比較器【模電實(shí)驗(yàn)】

    一位比較器,數(shù)值比較器的作用和原理是什么? 一、數(shù)值比較器的定義及功能 在數(shù)字系統(tǒng)中,特別是在計(jì)算機(jī)中都具有運(yùn)算功能,一種簡單的運(yùn)算就是比較兩個(gè)數(shù)A和B的大小。數(shù)值比較器就是對(duì)兩數(shù)A、B進(jìn)行比較,以判斷其大小的邏輯電路。比較結(jié)果有A>B、A<B以及

    2024年02月05日
    瀏覽(26)
  • LM393電壓比較器介紹

    LM393電壓比較器介紹

    概述 ? ? ? LM393 是雙電壓比較器集成電路。主要應(yīng)用在脈沖發(fā)生器、模數(shù)轉(zhuǎn)換器、限幅器、數(shù)字邏輯門電路、電壓比較電路等場(chǎng)合。LM393電壓比較器能直接連接TTL和CMOS電平電路。 特點(diǎn) 1、工作溫度范圍:0℃ --- +70℃; 2、工作電源電壓范圍寬,單電源、雙電源均可工作: ? ?

    2024年02月03日
    瀏覽(22)
  • Verilog | 4位數(shù)值比較器

    Verilog | 4位數(shù)值比較器

    ??蜕系囊坏李},記錄一下 這道題有兩種思路: 第一種是按位比較,列舉出所有情況: 第二種方法是,使用同或的方式獲取一個(gè)標(biāo)志位,進(jìn)而獲得判斷依據(jù): 關(guān)于比較器還有另外一道題 問題描述 給定8個(gè)數(shù),以及若干二輸入的比較器(可以將兩個(gè)輸入排序)。要求在單周期

    2024年02月11日
    瀏覽(26)
  • JAVA語言-比較器Comparator

    JAVA語言-比較器Comparator

    目錄 一、什么是Comparator 二、Java compare方法和compareTo方法 三、java中Comparable和Comparator的區(qū)別 Comparator的例子 Comparator 是javase中的接口,位于java.util包下。 數(shù)組工具類和集合工具類中提供的工具方法sort方法都給出了含有Comparator接口的重載方法。 List實(shí)例調(diào)sort方法 demo如下: 使

    2024年02月06日
    瀏覽(20)
  • Java比較器(Comparator接口)

    1.當(dāng)元素的類型沒有實(shí)現(xiàn)java.lang.Comparable接口而又不方便修改代碼,或者實(shí)現(xiàn)了java.lang.Comparable接口的排序規(guī)則不適合當(dāng)前的操作,那么可以考慮使用 Comparator 的對(duì)象來排序 2.重寫compare(Object o1,Object o2)方法,比較o1和o2的大小:如果方法返回正整數(shù),則表示o1大于o2;如果返回

    2024年02月15日
    瀏覽(26)
  • LM324電壓比較器介紹

    LM324電壓比較器介紹

    LM324 電壓比較器簡介 ? ? ? LM324 是單電源四路運(yùn)算放大器,是一個(gè)具有差分輸入和單端輸出的高增益電壓放大器。與在單電源應(yīng)用場(chǎng)合的標(biāo)準(zhǔn)運(yùn)算放大器比起來,其優(yōu)點(diǎn)更明顯。該四路放大器可以工作于低至3.0 V或高達(dá)32 V的電源電壓,靜態(tài)電流是MC1741的五分之一左右(每個(gè)放

    2024年02月06日
    瀏覽(39)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包