亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

LINQ 聯(lián)接運(yùn)算符 Join

聯(lián)接運(yùn)算符將兩個(gè)序列(集合)聯(lián)接并產(chǎn)生結(jié)果。

聯(lián)接運(yùn)算符用法
Join

Join 運(yùn)算符根據(jù)一個(gè)鍵連接兩個(gè)序列(集合)并返回結(jié)果序列。

GroupJoin

GroupJoin 運(yùn)算符根據(jù)鍵連接兩個(gè)序列并返回序列組。它類似于 SQL 的左外聯(lián)接。

Join

Join運(yùn)算符對(duì)兩個(gè)集合(內(nèi)部集合和外部集合)進(jìn)行操作。它返回一個(gè)新集合,其中包含兩個(gè)集合中滿足指定表達(dá)式的元素。它與SQL的內(nèi)部(inner join)聯(lián)接相同。

Join方法語法

Join擴(kuò)展方法有兩個(gè)重載,如下所示。

Join重載方法:

public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this IEnumerable<TOuter> outer, 
            IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, 
            Func<TInner, TKey> innerKeySelector, 
            Func<TOuter, TInner, TResult> resultSelector);
            
public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this IEnumerable<TOuter> outer, 
            IEnumerable<TInner> inner, 
            Func<TOuter, TKey> outerKeySelector,            
            Func<TInner, TKey> innerKeySelector, 
            Func<TOuter, TInner, TResult> resultSelector,            
            IEqualityComparer<TKey> comparer);

正如您在第一個(gè)重載中看到的,方法接受五個(gè)輸入?yún)?shù)(除了第一個(gè)“this”參數(shù)):1)outer 2)inner 3)outerKeySelector 4)inner keyselector 5)resultSelector。

讓我們舉一個(gè)簡單的實(shí)例。下面的示例連接兩個(gè)字符串集合,并返回兩個(gè)集合中都包含匹配字符串的新集合。

IList<string> strList1 = new List<string>() { 
    "One", 
    "Two", 
    "Three", 
    "Four"
};

IList<string> strList2 = new List<string>() { 
    "One", 
    "Two", 
    "Five", 
    "Six"
};

var innerJoin = strList1.Join(strList2,
                      str1 => str1, 
                      str2 => str2, 
                      (str1, str2) => str1);

輸出結(jié)果:

One
Two

現(xiàn)在,讓我們了解使用下面的Student和Standard類的join方法,其中Student類包括與Standard類的StandardID相匹配的StandardID。

public class Student{ 
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public int StandardID { get; set; }
}

public class Standard{ 
    public int StandardID { get; set; }
    public string StandardName { get; set; }
}

下面的示例演示LINQ Join查詢。

    示例:C# 聯(lián)接查詢

IList<Student> studentList = new List<Student>() { 
    new Student() { StudentID = 1, StudentName = "John", StandardID =1 },
    new Student() { StudentID = 2, StudentName = "Moin", StandardID =1 },
    new Student() { StudentID = 3, StudentName = "Bill", StandardID =2 },
    new Student() { StudentID = 4, StudentName = "Ram" , StandardID =2 },
    new Student() { StudentID = 5, StudentName = "Ron"  } 
};

IList<Standard> standardList = new List<Standard>() { 
    new Standard(){ StandardID = 1, StandardName="Standard 1"},
    new Standard(){ StandardID = 2, StandardName="Standard 2"},
    new Standard(){ StandardID = 3, StandardName="Standard 3"}
};

var innerJoin = studentList.Join(// 外序列 
                      standardList,  // 內(nèi)部序列 
                      student => student.StandardID,    // externalKeySelector
                      standard => standard.StandardID,  // innerKeySelector
                      (student, standard) => new  // 結(jié)果選擇器
                                    {
                                        StudentName = student.StudentName,
                                        StandardName = standard.StandardName
                                    });

下圖說明了上面示例中的Join運(yùn)算符的各個(gè)部分。

Join 運(yùn)算符

在上面的聯(lián)接查詢示例中,studentList是外部序列,因?yàn)椴樵儚乃_始。Join方法中的第一個(gè)參數(shù)用于指定內(nèi)部序列,在上面的示例中該序列為standardList。Join方法的第二個(gè)和第三個(gè)參數(shù)用于指定一個(gè)字段,該字段的值應(yīng)使用lambda表達(dá)式匹配,以便將元素包括在結(jié)果中。外部序列的鍵選擇器 student => student.StandardID指示StudentList的每個(gè)元素的標(biāo)準(zhǔn)ID字段應(yīng)該與內(nèi)部序列 standard => standard.StandardID 的鍵匹配。如果兩個(gè)鍵字段的值都匹配,則將該元素包括到結(jié)果中。

Join方法中的最后一個(gè)參數(shù)是用于表達(dá)結(jié)果的表達(dá)式。在上面的示例中,結(jié)果選擇器包括兩個(gè)序列的StudentName和StandardName屬性。

兩個(gè)序列(集合)的StandardID鍵必須匹配,否則該項(xiàng)將不包括在結(jié)果中。例如,Ron不與任何標(biāo)準(zhǔn)關(guān)聯(lián),因此Ron不包含在結(jié)果集合中。上述示例中的innerJoinResult在執(zhí)行后將包含以下元素:

John - Standard 1
Moin - Standard 1
Bill - Standard 2
Ram - Standard 2

下面的示例演示VB.Net中方法語法中的Join運(yùn)算符。

Dim innerJoin = studentList.Join(standardList, 
                                    Function(s) s.StandardID, 
                                    Function(std) std.StandardID, 
                                    Function(s, std) New With 
                                    {
                                        .StudentName = s.StudentName, 
                                        .StandardName = std.StandardName
                                    });

聯(lián)接查詢語法

查詢語法中的連接運(yùn)算符的工作原理與方法語法略有不同。它需要外部序列、內(nèi)部序列、鍵選擇器和結(jié)果選擇器“on”關(guān)鍵字用于鍵選擇器,其中“equals”運(yùn)算符的左側(cè)是outerKeySelector,“equals”運(yùn)算符的右側(cè)是innerKeySelector。

from ... in outerSequence

        join ... in innerSequence  

        on outerKey equals innerKey

        select ...

下面的查詢語法中的Join運(yùn)算符示例,如果Student.StandardID和Standard.StandardID匹配,則返回來自studentList和standardList的元素的集合。

  示例:C#使用查詢語法join聯(lián)接運(yùn)算符

IList<Student> studentList = new List<Student>() { 
    new Student() { StudentID = 1, StudentName = "John", Age = 13, StandardID =1 },
    new Student() { StudentID = 2, StudentName = "Moin",  Age = 21, StandardID =1 },
    new Student() { StudentID = 3, StudentName = "Bill",  Age = 18, StandardID =2 },
    new Student() { StudentID = 4, StudentName = "Ram" , Age = 20, StandardID =2 },
    new Student() { StudentID = 5, StudentName = "Ron" , Age = 15 } 
};

IList<Standard> standardList = new List<Standard>() { 
    new Standard(){ StandardID = 1, StandardName="Standard 1"},
    new Standard(){ StandardID = 2, StandardName="Standard 2"},
    new Standard(){ StandardID = 3, StandardName="Standard 3"}
};

var innerJoin = from s in studentList // 外序列
                      join st in standardList //內(nèi)部序列 
                      on s.StandardID equals st.StandardID // 鍵選擇器 
                      select new { // 結(jié)果選擇器 
                                    StudentName = s.StudentName, 
                                    StandardName = st.StandardName 
                                };

示例:VB.Net中的查詢語法聯(lián)接運(yùn)算符

Dim innerJoin = From s In studentList ' outer sequence
                      Join std In standardList  ' inner sequence 
                      On s.StandardID Equals std.StandardID '鍵選擇器
                      Select _  ' 選擇器結(jié)果
                            StudentName = s.StudentName,
                            StandardName = std.StandardName
輸出:
John - Standard 1
Moin - Standard 1
Bill - Standard 2
Ram - Standard 2
使用equals運(yùn)算符匹配查詢語法中的鍵選擇器。==無效。

要記住的要點(diǎn)

  1. Join 和 GroupJoin是連接運(yùn)算符。

  2. Join 類似于SQL的內(nèi)部連接。它返回一個(gè)新集合,其中包含兩個(gè)鍵匹配的集合中的公共元素。

  3. Join 對(duì)內(nèi)部序列和外部序列這兩個(gè)序列進(jìn)行運(yùn)算,并生成結(jié)果序列。

  4. Join 查詢語法:

    from... in outerSequence
    join... in innerSequence 
    on  outerKey equals innerKey
    select ...