using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A16_LinqQueryExpression
{
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public int Levelnum { get; set; }
public Employee(int id, string name, int age, int levelnum)
{
ID = id;
Name = name;
Age = age;
Levelnum = levelnum;
}
public override string ToString()
{
return string.Format("ID = {0} Name = {1} Age = {2} Levelnum = {3}", ID, Name, Age, Levelnum);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A16_LinqQueryExpression
{
public class EmpLevel
{
public int ID { get; set; }
public int LevelNum { get; set; }
public string LevelName { get; set; }
public float Salary { get; set; }
public EmpLevel(int id, int levelnum, string levelname, float salary)
{
ID = id;
LevelNum = levelnum;
LevelName = levelname;
Salary = salary;
}
public override string ToString()
{
return string.Format("ID = {0} LevelNum = {1} LevelName = {2} Salary = {3}", ID, LevelNum, LevelName, Salary);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A16_LinqQueryExpression
{
class Demo1
{
List<Employee> empArray = new List<Employee>();
List<EmpLevel> empLeArray = new List<EmpLevel>();
List<Employee> empQueryArray = new List<Employee>();
public Demo1()
{
empLeArray = new List<EmpLevel>();
empArray = new List<Employee>();
empQueryArray = new List<Employee>();
//集合信息,初始化數據(僱員信息)
empArray.Add(new Employee(1, "姜 文", 40, 4));
empArray.Add(new Employee(2, "馮小剛", 50, 5));
empArray.Add(new Employee(3, "張藝謀", 60, 6));
empArray.Add(new Employee(4, "王寶強", 35, 3));
empArray.Add(new Employee(5, "范冰冰", 30, 3));
empArray.Add(new Employee(6, "李冰冰", 29, 2));
empArray.Add(new Employee(7, "李一凡", 20, 1));
//初始化僱員級別信息
empLeArray.Add(new EmpLevel(1, 1, "T1-1", 5000F));
empLeArray.Add(new EmpLevel(2, 2, "T1-2", 8000F));
empLeArray.Add(new EmpLevel(3, 3, "T1-3", 10000F));
empLeArray.Add(new EmpLevel(4, 4, "T2-1", 15000F));
empLeArray.Add(new EmpLevel(5, 5, "T2-2", 20000F));
empLeArray.Add(new EmpLevel(6, 6, "T3-1", 30000F));
}
//傳統查詢:查詢Level級別大於2的所有公司僱員
public void Test1()
{
foreach (Employee emp in empArray)
{
if (emp.Levelnum > 2)
{
empQueryArray.Add(emp);
}
}
foreach (Employee emp in empQueryArray)
{
Console.WriteLine(emp.ToString());
}
}
//使用Linq進行查詢Level級別大於2的所有公司僱員
public void Test2()
{
var result = from m in empArray
where m.Levelnum > 2 && m.Age >= 50
select m;
foreach (var item in result)
{
Console.WriteLine(item.ToString());
}
}
static void Main1(string[] args)
{
Demo1 obj = new Demo1();
//obj.Test1();
obj.Test2();
}
}
}
//C#擴展方法:給已經定義好的類,添加新的方法
//只有靜態類才能添加擴展方法
//擴展方法必須是靜態的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A16_LinqQueryExpression
{
static class Demo3
{
public static void Test1()
{
string str = "Hello Everyone";
string strResult = str.TestMethod();
string strResult2 = str.TestMethod("hahaha");
Console.WriteLine(strResult);
Console.WriteLine(strResult2);
}
//無參擴展方法
public static string TestMethod(this string name)
{
return name + "Good morning";
}
//有一個參數的擴展方法
public static string TestMethod(this string name, string para)
{
return name + "Good morning" + para;
}
static void Main1(string[] args)
{
Demo3.Test1();
}
}
}
//Linq的擴展方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A16_LinqQueryExpression
{
class Demo4
{
List<Employee> empArray = new List<Employee>();
List<EmpLevel> empLeArray = new List<EmpLevel>();
List<Employee> empQueryArray = new List<Employee>();
public Demo4()
{
empLeArray = new List<EmpLevel>();
empArray = new List<Employee>();
empQueryArray = new List<Employee>();
//集合信息,初始化數據(僱員信息)
empArray.Add(new Employee(1, "姜 文", 40, 3));
empArray.Add(new Employee(2, "馮小剛", 50, 5));
empArray.Add(new Employee(3, "張藝謀", 60, 6));
empArray.Add(new Employee(4, "王寶強", 35, 3));
empArray.Add(new Employee(5, "范冰冰", 30, 3));
empArray.Add(new Employee(6, "李冰冰", 29, 2));
empArray.Add(new Employee(7, "李一凡", 20, 2));
//初始化僱員級別信息
empLeArray.Add(new EmpLevel(1, 1, "T1-1", 5000F));
empLeArray.Add(new EmpLevel(2, 2, "T1-2", 8000F));
empLeArray.Add(new EmpLevel(3, 3, "T1-3", 10000F));
empLeArray.Add(new EmpLevel(4, 4, "T2-1", 15000F));
empLeArray.Add(new EmpLevel(5, 5, "T2-2", 20000F));
empLeArray.Add(new EmpLevel(6, 6, "T3-1", 30000F));
}
//使用Linq的擴展方法,查詢等級大於2的僱員信息
public void Test1()
{
//使用擴展方法1
//var result = empArray.Where(FilterConditionMethod);
//使用擴展方法2 lambda表達式
var result = empArray.Where(a => a.Levelnum > 2);
foreach (var item in result)
{
Console.WriteLine(item.ToString());
}
}
/*
private bool FilterConditionMethod(Employee emp)
{
if (emp.Levelnum > 2)
{
return true;
}
else
{
return false;
}
}
*/
//聯合查詢 查詢兩個集合的並集
public void Test2()
{
/*
var queryResult = from e in empArray
from l in empLeArray
select new { e, l }; //輸出兩個集合的並集
*/
//查詢出所有大於3級的信息
/*
var queryResult = from e in empArray
from l in empLeArray
where e.Levelnum == l.LevelNum && e.Levelnum > 3
select new { e, l }; //輸出兩個集合的並集
*/
//輸出所有大於三級的僱員姓名、級別、工資
var queryResult = from e in empArray
from l in empLeArray
where e.Levelnum == l.LevelNum && e.Levelnum > 3
select new { e.Name, l.LevelName, l.Salary }; //輸出兩個集合的並集
foreach (var item in queryResult)
{
//Console.WriteLine(item.ToString());
Console.WriteLine("姓名 = {0} 級別 = {1} 工資 = {2}",item.Name, item.LevelName, item.Salary);
}
}
//排序
public void Test3()
{
//輸出所有大於1級的僱員姓名、級別、工資 且根據姓名,級別和年齡進行排序
var queryResult = from e in empArray
from l in empLeArray
where e.Levelnum == l.LevelNum && e.Levelnum > 1
orderby e.Levelnum, e.Name, e.Age //descending 降序關鍵字 //排序語句
select new { e.Name, l.LevelName, l.Salary }; //輸出兩個集合的並集
foreach (var item in queryResult)
{
//Console.WriteLine(item.ToString());
Console.WriteLine("姓名 = {0} 級別 = {1} 工資 = {2}",item.Name, item.LevelName, item.Salary);
}
}
//Join On關鍵字 聯合查詢
public void Test4()
{
var queryResult = from e in empArray
join l in empLeArray
on e.Levelnum equals l.LevelNum
where e.Levelnum > 2 && l.Salary > 20000
select new {e,l};
foreach (var item in queryResult)
{
Console.WriteLine("名稱 = "+item.e.Name + " " + "級別 = " + item.l.LevelName);
}
}
//Group by 分組關鍵字
public void Test5()
{
//查詢僱員集合中,按照級別分組,統計每個級別有多少人
var queryResult = from e in empArray
group e by e.Levelnum into g //分組結果爲g
select new { g.Key, counts = g.Count() };
foreach (var item in queryResult)
{
Console.WriteLine("級別:"+item.Key+" "+"數量:"+item.counts);
}
}
//any關鍵字:至少有一個符合條件
//all關鍵字:全都滿足條件
public void Test6()
{
bool boolResult = empArray.Any(m => m.Name == "王寶強");
Console.WriteLine("是否有一個或以上個員工叫“王寶強”:" + boolResult);
}
public void Test7()
{
bool boolResult = empArray.All(m => m.Name == "王寶強");
Console.WriteLine("是否有所有員工都叫“王寶強”:" + boolResult);
}
static void Main(string[] args)
{
Demo4 obj = new Demo4();
//obj.Test1();
//obj.Test2();
//obj.Test3();
//obj.Test5();
obj.Test6();
obj.Test7();
}
}
}