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

C# Linq 學(xué)會使用,學(xué)會自己編寫Linq

這篇具有很好參考價值的文章主要介紹了C# Linq 學(xué)會使用,學(xué)會自己編寫Linq。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Linq我暫時理解為,一種內(nèi)置的非常方便的數(shù)據(jù)查詢的工具

使用

我們先學(xué)習(xí)它的使用

//數(shù)據(jù)類

    public class DataTest
    {
        /// <summary>
        /// 編號
        /// </summary>
        public int id;
        /// <summary>
        /// 名字
        /// </summary>
        public string name;
        /// <summary>
        /// 介紹
        /// </summary>
        public string describe;
        /// <summary>
        /// 年齡
        /// </summary>
        public int age;

    }

//新建了一個List數(shù)據(jù),用來測試數(shù)據(jù)查詢?

  List<DataTest> dataTests = new List<DataTest>()
            {
                new DataTest(){
                    id = 0,
                    name = "一",
                    describe ="介紹",
                    age = 10
                },
                new DataTest(){
                    id = 1,
                    name = "二",
                    describe ="介紹",
                    age = 20
                },
                new DataTest(){
                    id = 2,
                    name = "三",
                    describe ="介紹",
                    age = 30
                },
                new DataTest(){
                    id = 3,
                    name = "四",
                    describe ="介紹",
                    age = 40
                },   
                new DataTest(){
                    id = 4,
                    name = "五",
                    describe ="介紹",
                    age = 50
                },   
                new DataTest(){
                    id = 5,
                    name = "六",
                    describe ="介紹",
                    age = 60
                },
            };

//現(xiàn)在定義一個需求,需要查出id>2的數(shù)據(jù)

我們一般的寫法,應(yīng)該是foreach

Console.WriteLine("**************foreach遍歷*****************");
foreach (var item in dataTests)
{
    if (item.id > 2) {
    Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
    }
}

C# Linq 學(xué)會使用,學(xué)會自己編寫Linq

現(xiàn)在我們用Linq的方式來寫

引用Linq的命名空間

using System.Linq;

?引用命名空間之后,我們的list對象,擁有了一個擴展方法,Where

(擴展方法,在之前的博客有專門講過)

我們現(xiàn)在看看Where怎么用

C# Linq 學(xué)會使用,學(xué)會自己編寫Linq

我們看到Where函數(shù)是 需要一個Func的參數(shù) func的參數(shù)是我們的數(shù)據(jù),返回值是一個bool

C# Linq 學(xué)會使用,學(xué)會自己編寫Linq

?我們F12 查看,Func類的介紹,防止你們這一步看不懂了

?

Linq擴展方法寫法

我們用Lambda表達式來寫的話,就是這個樣子的

(Lambda表達式,在之前的博客也有專門講過)

var list = dataTests.Where(d => d.id > 2);
"匿名函數(shù)的寫法,熟練的同學(xué)用上面這種方式寫,更簡潔"
//var list = dataTests.Where((DataTest d)=> { return d.id > 2; });
//var list = dataTests.Where(delegate (DataTest d){ return d.id > 2; });

"上面這一步,就已經(jīng)取出我們需要的值, 下面這個循環(huán)只做輸出用"
foreach (var item in list)
{
    Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
}

現(xiàn)在我們改變一下需求,用Linq的別的寫法age < 30同時ID不等于0

Linq關(guān)鍵字寫法

這個寫法應(yīng)該學(xué)過數(shù)據(jù)庫的同學(xué),應(yīng)該更容易理解

var list = from d in dataTests
           where d.age < 30 && d.id != 0
           select d;

foreach (var item in list)
{
    Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
}

結(jié)果是只有一條數(shù)據(jù)符合要求,證明我們的寫法都是正確的

C# Linq 學(xué)會使用,學(xué)會自己編寫Linq

?自己編寫Linq

為了方便理解,我們自己也寫一個同樣功能的Linq

這里看不懂的還是要回去看看擴展方法那一節(jié)

public static class Extension
{
    public static List<DataTest> MyWhere(this List<DataTest> resource ,Func<DataTest,bool> func)
    {
        var list = new List<DataTest>();

        foreach (var item in resource)
        {
            if (func(item)) {
                list.Add(item);
            }
        }

        return list;
    }
}

//其實Linq就是把我們要寫的循環(huán)封裝了

我們現(xiàn)在使用自己寫的Linq,看看效果怎么樣

C# Linq 學(xué)會使用,學(xué)會自己編寫Linq

var list = dataTests.MyWhere((d)=> d.age < 30 && d.id != 0);

foreach (var item in list)
{
    Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
}

?C# Linq 學(xué)會使用,學(xué)會自己編寫Linq

效果完全一樣.但是我們的這個復(fù)用性太低了,我們用泛型給它改一下?

  public static List<T> MyWhereCommon<T>(this List<T> resource, Func<T, bool> func)
        {
            var list = new List<T>();

            foreach (var item in resource)
            {
                if (func(item))
                {
                    list.Add(item);
                }
            }

            return list;
        }
 var list = dataTests.MyWhereCommon((d)=> d.age < 30 && d.id != 0);

                foreach (var item in list)
                {
                    Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
                }

用法沒變,但是我們別的集合也可以通用了

當(dāng)然,舉一反三,大家可以可以通過這個寫法,寫出更多適合需求的工具文章來源地址http://www.zghlxwxcb.cn/news/detail-459819.html

到了這里,關(guān)于C# Linq 學(xué)會使用,學(xué)會自己編寫Linq的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • C#中的LINQ

    一:什么是LINQ LINQ代表語言集成查詢,是.net框架的擴展,它允許我們用SQL查詢數(shù)據(jù)庫的方式來查詢數(shù)據(jù)的集合 二:LINQ延遲查詢的特性 延遲查詢是指查詢操作并不是在定義的時候執(zhí)行,而是在遍歷集合中的數(shù)據(jù)時才執(zhí)行 因為作為yield迭代器的主體,只有使用foreach遍歷執(zhí)行到

    2023年04月09日
    瀏覽(21)
  • C# Linq 詳解二

    C# Linq 詳解二

    目錄 概述 七、OrderBy? 八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All C# Linq 文檔(一) 1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault C# Linq 文檔(二) 1.OrderBy ,2.OrderByDescending,3.Skip,4.Take,5.Any,6.All C# Linq 文檔(三) 1.Sum / Min / Max / Average,2.Dist

    2024年02月16日
    瀏覽(19)
  • C# LINQ,SQL

    C#中的LINQ和SQL都是用于查詢數(shù)據(jù)的工具,但它們有以下異同點: 異同點: 1. LINQ和SQL都可以用于查詢數(shù)據(jù),但LINQ是在C#中使用的語言集成查詢,而SQL是一種獨立的查詢語言。 2. LINQ和SQL都支持基本的查詢操作,如選擇、過濾、排序和分組。 3. LINQ和SQL都支持連接多個表,但LI

    2024年02月10日
    瀏覽(18)
  • C# Linq 詳解一

    C# Linq 詳解一

    目錄 一、概述 二、Where 三、Select 四、GroupBy 五、First / FirstOrDefault 六、Last / LastOrDefault C# Linq 文檔(一) 1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault C# Linq 文檔(二) 1.OrderBy,?2.OrderByDescending,3.Skip,4.Take,5.Any,6.All C# Linq 文檔(三) 1.Sum / Min / Max / Av

    2024年02月16日
    瀏覽(25)
  • C# Linq 詳解四

    C# Linq 詳解四

    目錄 概述 二十、SelectMany 二十一、Aggregate 二十二、DistinctBy 二十三、Reverse 二十四、SequenceEqual 二十五、Zip 二十六、SkipWhile? 二十七、TakeWhile C# Linq 文檔(一) 1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault C# Linq 文檔(二) 1.OrderBy ,2.OrderByDescending,3.Skip,

    2024年02月16日
    瀏覽(18)
  • C# Lambda,LINQ

    Lambda表達式和LINQ語句都是C#中用于查詢和篩選數(shù)據(jù)的工具,但它們有一些異同點。 異同點: 1. 語法不同: Lambda表達式是一種匿名函數(shù) ,它可以用于創(chuàng)建委托或表達式樹。而LINQ語句是一種查詢語句,它使用特定的和語法來查詢數(shù)據(jù)。 2. 功能不同: Lambda表達式可以用于

    2024年02月09日
    瀏覽(26)
  • C# Linq 詳解三

    C# Linq 詳解三

    目錄 概述 十三、Sum / Min / Max / Average 十四、Distinct 十五、Concat 十六、Join 十七、ToList? 十八、ToArray 十九、ToDictionary C# Linq 文檔(一) 1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault C# Linq 文檔(二) 1.OrderBy ,2.OrderByDescending,3.Skip,4.Take,5.Any,6.All C# Linq 文

    2024年02月16日
    瀏覽(17)
  • C#高級編程 Linq介紹

    本文對C#高級編程部分的Linq查詢進行介紹 目錄 一、Linq起源 二 LINQ 操作組成 2.1數(shù)據(jù)源 2.2查詢 3.3查詢執(zhí)行

    2024年02月11日
    瀏覽(28)
  • 【C# 基礎(chǔ)精講】LINQ 基礎(chǔ)

    【C# 基礎(chǔ)精講】LINQ 基礎(chǔ)

    LINQ(Language Integrated Query)是一項強大的C#語言特性,它使數(shù)據(jù)查詢和操作變得更加簡潔、靈活和可讀性強。通過使用LINQ,您可以使用類似SQL的語法來查詢各種數(shù)據(jù)源,如集合、數(shù)組、數(shù)據(jù)庫等。本文將介紹LINQ的基礎(chǔ)概念、常見的LINQ操作和示例,以及如何在C#中利用LINQ進行數(shù)

    2024年02月12日
    瀏覽(22)
  • C#版本LINQ增強開源庫

    C#版本LINQ增強開源庫

    LINQ對應(yīng)的中文名稱是:語言集成查詢,是對一系列直接將查詢功能集成到C#語言技術(shù)的統(tǒng)稱,我們最常用的場景是,用于數(shù)據(jù)庫的查詢功能。 在.Net中,本身對Objects也支持LINQ的擴展,但是對于一些特定的功能,就需要我們自己去擴展。 所以,今天給大家推薦一個LINQ擴展庫,

    2023年04月13日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包