日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Linq入门演练---(1)基本用法-分组,排序,内连接

發布時間:2024/4/15 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linq入门演练---(1)基本用法-分组,排序,内连接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這一節大家共同學習下LINQ的基本用法,主要包括LINQ的分組,排序,和內外連接。

1.分組

?? 基本語法:? group element by key

????????????????????? element 表示查詢結果返回的元素,key表示分組條件。group子句返回的類型為IGrouping<TKey,TElement>的查詢結果。

????????????????????? IGrouping<TKey,TElement>可以看成一個hashtable內部嵌套一個list列表的數據結果. 其中TElement就是一個list

我們看下面的一個事例,下面這個實例演示根據性別對用戶進行分組

代碼

?

[csharp] view plaincopyprint?
  • publicclass User?
  • ??? {?
  • ??????? public User(string userName,string sex,int age)?
  • ??????? {?
  • ??????????? UserName = userName;?
  • ??????????? Sex = sex;?
  • ??????????? Age = age;?
  • ??????? }?
  • ?
  • ??????? publicstring UserName?
  • ??????? {?
  • ??????????? get;?
  • ??????????? set;?
  • ??????? }?
  • ?
  • ??????? publicstring Sex?
  • ??????? {?
  • ??????????? get;?
  • ??????????? set;?
  • ??????? }?
  • ?
  • ??????? publicint Age?
  • ??????? {?
  • ??????????? get;?
  • ??????????? set;?
  • ??????? }?
  • ??? }?
  • public class User{public User(string userName,string sex,int age){UserName = userName;Sex = sex;Age = age;}public string UserName{get;set;}public string Sex{get;set;}public int Age{get;set;}}

    ?

    ?

    [csharp] view plaincopyprint?
  • privatevoid button1_Click(object sender, EventArgs e)?
  • ??????? {?
  • ??????????? User[] users = {??
  • ?????????????????????????? new User("劉德華","男",40),?
  • ?????????????????????????? new User("張學友","男",30),?
  • ?????????????????????????? new User("張曼玉","女",35),?
  • ?????????????????????????? new User("楊冪","女",53)?
  • ?????????????????????????? };?
  • ?
  • ??????????? var query1 =?
  • ????????????????? from var1 in users?
  • ????????????????? group var1 by var1.Sex;?
  • ?
  • ??????????? string str = "";?
  • ??????????? foreach (var item in query1)?
  • ??????????? {?
  • ??????????????? str += item.Key + "\r\n";?
  • ?
  • ??????????????? foreach (var user in item)?
  • ??????????????? {?
  • ??????????????????? str += user.UserName + "--" + user.Sex + "--" + user.Age.ToString() + "\r\n";?
  • ??????????????? }?
  • ??????????????
  • ??????????? }?
  • ??????????? textBox1.Text = str;?
  • ?
  • ??????? }?
  • private void button1_Click(object sender, EventArgs e){User[] users = { new User("劉德華","男",40),new User("張學友","男",30),new User("張曼玉","女",35),new User("楊冪","女",53)};var query1 =from var1 in usersgroup var1 by var1.Sex;string str = "";foreach (var item in query1){str += item.Key + "\r\n";foreach (var user in item){str += user.UserName + "--" + user.Sex + "--" + user.Age.ToString() + "\r\n";}}textBox1.Text = str;}

    ?

    ?

    效果圖

    以上是簡單的分組,如果需要對分組結果進行排序,需要把分組結果保存到一個臨時變量中

    語法: group element by key into? temp

    ?? 以下是按年齡從小到大的排序:

    ? 代碼

    [csharp] view plaincopyprint?
  • User[] users = {??
  • ????????????????????????? new User("劉德華","男",40),?
  • ????????????????????????? new User("張學友","男",30),?
  • ????????????????????????? new User("張曼玉","女",35),?
  • ????????????????????????? new User("楊冪","女",53)?
  • ????????????????????????? };?
  • ?
  • ?????????? var query1 =?
  • ???????????????? from var1 in users?
  • ???????????????? group var1 by var1.Age into temp?
  • ???????????????? orderby temp.Key descending?
  • ???????????????? select temp;?
  • ?
  • ?????????? string str = "";?
  • ?????????? foreach (var item in query1)?
  • ?????????? {?
  • ?????????????? str += item.Key + "\r\n";?
  • ?
  • ?????????????? foreach (var user in item)?
  • ?????????????? {?
  • ?????????????????? str += user.UserName + "--" + user.Sex + "--" + user.Age.ToString() + "\r\n";?
  • ?????????????? }?
  • ?????????????
  • ?????????? }?
  • ?????????? textBox1.Text = str;?
  • User[] users = { new User("劉德華","男",40),new User("張學友","男",30),new User("張曼玉","女",35),new User("楊冪","女",53)};var query1 =from var1 in usersgroup var1 by var1.Age into temporderby temp.Key descendingselect temp;string str = "";foreach (var item in query1){str += item.Key + "\r\n";foreach (var user in item){str += user.UserName + "--" + user.Sex + "--" + user.Age.ToString() + "\r\n";}}textBox1.Text = str;

    ?

    ?

    ?? 效果圖

    ?

    ?

    2.排序

    ??? 在linq中排序使用orderby

    ??? 語法 orderby elment? descending||ascending

    ????? ascending表示升序,descending表示降序

    ??? 下面這個DEMO演示按年齡從大到小排序

    ??? 代碼:

    ????

    [csharp] view plaincopyprint?
  • User[] users = {??
  • ?????????????????????????? new User("劉德華","男",40),?
  • ?????????????????????????? new User("張學友","男",30),?
  • ?????????????????????????? new User("張曼玉","女",35),?
  • ?????????????????????????? new User("楊冪","女",53)?
  • ?????????????????????????? };?
  • ?
  • ??????????? var query1 =?
  • ????????????????? from var1 in users?
  • ????????????????? orderby var1.Age descending?
  • ????????????????? select var1;?
  • ?
  • ??????????? string str = "";?
  • ??????????? foreach (var item in query1)?
  • ??????????? {?
  • ??????????????? str += item.UserName + "--" + item.Age + "\r\n";?
  • ??????????? }?
  • ??????????? textBox1.Text = str;?
  • User[] users = { new User("劉德華","男",40),new User("張學友","男",30),new User("張曼玉","女",35),new User("楊冪","女",53)};var query1 =from var1 in usersorderby var1.Age descendingselect var1;string str = "";foreach (var item in query1){str += item.UserName + "--" + item.Age + "\r\n";}textBox1.Text = str;

    ? 效果圖

    ??

    ?

    3.內連接

    ??? 內連接查詢就是根據一定的條件查詢兩個數據源中都存在的元素

    ?? 語法: join elment? in datasource on re1 equals re2

    ?? 以下代碼查找兩個數組中都存在的元素。

    ? 代碼:

    [csharp] view plaincopyprint?
  • privatevoid button3_Click(object sender, EventArgs e)?
  • ??????? {?
  • ??????????? //查詢兩個數組中都存在的元素?
  • ??????????? int[] arrOne = { 10,20,30,6,8};?
  • ??????????? int[] arrTwo = { 10,4,6,8,90,3};?
  • ?
  • ??????????? var query = from re1 in arrOne?
  • ??????????????????????? join re2 in arrTwo on re1 equals re2?
  • ??????????????????????? select new { re1 = re1, re2 = re2 };?
  • ?
  • ??????????? foreach (var item in query)?
  • ??????????? {?
  • ??????????????? Console.WriteLine(item);?
  • ??????????? }?
  • ?
  • ??????? }?
  • private void button3_Click(object sender, EventArgs e){//查詢兩個數組中都存在的元素int[] arrOne = { 10,20,30,6,8};int[] arrTwo = { 10,4,6,8,90,3};var query = from re1 in arrOnejoin re2 in arrTwo on re1 equals re2select new { re1 = re1, re2 = re2 };foreach (var item in query){Console.WriteLine(item);}}

    ?

    ? 查詢結果:

    [csharp] view plaincopyprint?
  • { re1 = 10, re2 = 10 }?
  • { re1 = 6, re2 = 6 }?
  • { re1 = 8, re2 = 8 }?
  • { re1 = 10, re2 = 10 } { re1 = 6, re2 = 6 } { re1 = 8, re2 = 8 }

    ?

    4.左連接

    左連接和SQL中的左連接類似,返回第一個結果集中的所有元素。

    下面的代碼演示使用左連接,左連接要用到defaultempty()方法,此方法從列表中獲取指定元素,如果列表為空,返回默認值

    代碼

    [csharp] view plaincopyprint?
  • privatevoid button4_Click(object sender, EventArgs e)?
  • ????? {?
  • ????????? //左連接?
  • ????????? int[] arrOne = { 10, 20, 30, 6, 8 };?
  • ????????? int[] arrTwo = { 10, 4, 6, 8, 90, 3 };?
  • ?
  • ????????? var query = from re1 in arrOne?
  • ????????????????????? join re2 in arrTwo on re1 equals re2 into temgrp?
  • ????????????????????? from grp in temgrp.DefaultIfEmpty()?
  • ????????????????????? select new { re1 = re1, re2 = grp };?
  • ?
  • ????????? foreach (var item in query)?
  • ????????? {?
  • ????????????? Console.WriteLine(item);?
  • ????????? }?
  • ????? }?
  • private void button4_Click(object sender, EventArgs e){//左連接int[] arrOne = { 10, 20, 30, 6, 8 };int[] arrTwo = { 10, 4, 6, 8, 90, 3 };var query = from re1 in arrOnejoin re2 in arrTwo on re1 equals re2 into temgrpfrom grp in temgrp.DefaultIfEmpty()select new { re1 = re1, re2 = grp };foreach (var item in query){Console.WriteLine(item);}}

    ?

    ?

    查詢結果

    [csharp] view plaincopyprint?
  • { re1 = 10, re2 = 10 }?
  • { re1 = 20, re2 = 0 }?
  • { re1 = 30, re2 = 0 }?
  • { re1 = 6, re2 = 6 }?
  • { re1 = 8, re2 = 8 }?
  • 總結

    以上是生活随笔為你收集整理的Linq入门演练---(1)基本用法-分组,排序,内连接的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。