LINQ操作符SelectMany的用法
更新時間:2022年02月28日 11:25:05 作者:.NET開發(fā)菜鳥
這篇文章介紹了LINQ操作符SelectMany的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
SelectMany操作符提供了將多個from子句組合起來的功能,相當于數(shù)據(jù)庫中的多表連接查詢,它將每個對象的結(jié)果合并成單個序列。
示例:
student類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SelectMany操作符 { /// <summary> /// 學生類 /// </summary> public class Student { //姓名 public string Name { get; set; } //成績 public int Score { get; set; } //構(gòu)造函數(shù) public Student(string name, int score) { this.Name = name; this.Score = score; } } }
teacher類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SelectMany操作符 { /// <summary> /// Teacher類 /// </summary> public class Teacher { //姓名 public string Name { get; set; } //學生集合 public List<Student> Students { get; set; } public Teacher(string name, List<Student> students) { this.Name = name; this.Students = students; } } }
Program類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SelectMany操作符 { class Program { static void Main(string[] args) { //使用集合初始化器初始化Teacher集合 List<Teacher> teachers = new List<Teacher> { new Teacher("徐老師", new List<Student>(){ new Student("宋江",80), new Student("盧俊義",95), new Student("朱武",45) } ), new Teacher("姜老師", new List<Student>(){ new Student("林沖",90), new Student("花榮",85), new Student("柴進",58) } ), new Teacher("樊老師", new List<Student>(){ new Student("關(guān)勝",100), new Student("阮小七",70), new Student("時遷",30) } ) }; //問題:查詢Score小于60的學生 //方法1:循環(huán)遍歷、會有性能的損失 foreach (Teacher t in teachers) { foreach (Student s in t.Students) { if (s.Score < 60) { Console.WriteLine("姓名:" + s.Name + ",成績:"+s.Score); } } } //查詢表達式 //方法2:使用SelectMany 延遲加載:在不需要數(shù)據(jù)的時候,就不執(zhí)行調(diào)用數(shù)據(jù),能減輕程序和數(shù)據(jù)庫的交互,可以提供程序的性能,執(zhí)行循環(huán)的時候才去訪問數(shù)據(jù)庫取數(shù)據(jù) //直接返回學生的數(shù)據(jù) var query = from t in teachers from s in t.Students where s.Score < 60 select s; foreach (var item in query) { Console.WriteLine("姓名:" + item.Name + ",成績:"+item.Score); } //只返回老師的數(shù)據(jù) var query1 = from t in teachers from s in t.Students where s.Score < 60 select new { t, teacherName=t.Name, student=t.Students.Where(p=>p.Score<60).ToList() }; foreach (var item in query1) { Console.WriteLine("老師姓名:" + item.teacherName + ",學生姓名:" +item.student.FirstOrDefault().Name+ ",成績:" + item.student.FirstOrDefault().Score); } // 使用匿名類 返回老師和學生的數(shù)據(jù) var query2 = from t in teachers from s in t.Students where s.Score < 60 select new { teacherName=t.Name, studentName=s.Name,studentScore=s.Score }; foreach (var item in query2) { Console.WriteLine("老師姓名:" + item.teacherName + ",學生姓名:" + item.studentName + ",成績:" + item.studentScore); } //使用查詢方法 var query3 = teachers.SelectMany(p => p.Students.Where(t=>t.Score<60).ToList()); foreach (var item in query3) { Console.WriteLine("姓名:" + item.Name + ",成績:" + item.Score); } Console.ReadKey(); } } }
到此這篇關(guān)于LINQ操作符SelectMany的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實現(xiàn)根據(jù)給出的相對地址獲取網(wǎng)站絕對地址的方法
這篇文章主要介紹了C#實現(xiàn)根據(jù)給出的相對地址獲取網(wǎng)站絕對地址的方法,涉及C#URL及字符串操作的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03C#如何控制IIS動態(tài)添加刪除網(wǎng)站詳解
這篇文章主要給大家介紹了關(guān)于C#如何控制IIS動態(tài)添加刪除網(wǎng)站的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-11-11c#實現(xiàn)數(shù)據(jù)同步的方法(使用文件監(jiān)控對象filesystemwatcher)
這篇文章主要介紹了C#使用文件監(jiān)控對象FileSystemWatcher實現(xiàn)數(shù)據(jù)同步,大家參考使用吧2013-12-12