LINQ操作符SelectMany的用法
更新時間:2022年02月28日 11:25:05 作者:.NET開發(fā)菜鳥
這篇文章介紹了LINQ操作符SelectMany的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
SelectMany操作符提供了將多個from子句組合起來的功能,相當于數(shù)據(jù)庫中的多表連接查詢,它將每個對象的結果合并成單個序列。
示例:
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; }
//構造函數(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("關勝",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();
}
}
}到此這篇關于LINQ操作符SelectMany的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C#實現(xiàn)根據(jù)給出的相對地址獲取網(wǎng)站絕對地址的方法
這篇文章主要介紹了C#實現(xiàn)根據(jù)給出的相對地址獲取網(wǎng)站絕對地址的方法,涉及C#URL及字符串操作的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03
C#如何控制IIS動態(tài)添加刪除網(wǎng)站詳解
這篇文章主要給大家介紹了關于C#如何控制IIS動態(tài)添加刪除網(wǎng)站的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-11-11
c#實現(xiàn)數(shù)據(jù)同步的方法(使用文件監(jiān)控對象filesystemwatcher)
這篇文章主要介紹了C#使用文件監(jiān)控對象FileSystemWatcher實現(xiàn)數(shù)據(jù)同步,大家參考使用吧2013-12-12

