using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication2
{
internal class Program
{
public static void Main(string[] args)
{
Init init = new Init();
var kongfus = init.Kongfus();
var roles = init.Role(kongfus);
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>查询华山门派且级别大于5的角色<<<<<<<<<<<<<<<<<<<<<<<<");
//Linq查询:查询华山门派且级别大于5的角色
//IEnumerable<MartialArtsMaster> query = Enumerable.Where(roles, n => n.Menpai.Equals("丐帮") && n.Level > 5);//普通的静态方法语法
//IEnumerable<MartialArtsMaster> query = roles.Where(n => n.Menpai.Equals("丐帮")&&n.Level>5);//扩展方法语法
IEnumerable<MartialArtsMaster>
query = from n in roles where n.Menpai.Equals("丐帮") && n.Level > 5 select n; //查询表达式|查询语法
foreach (var role in query)
{
Console.WriteLine(role.ToString());
}
//Linq联合查询:查询功夫力量大于90且级别大于5的角色
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>查询功夫力量大于90且级别大于5的角色<<<<<<<<<<<<<<<<<<<<<<<<");
//IEnumerable<MartialArtsMaster> query1 = Enumerable.Where(roles, n => n.Kongfu.Power > 90 && n.Level > 5);//普通的静态方法语法
//IEnumerable<MartialArtsMaster> query1 = roles.Where(n => n.Kongfu.Power > 90 && n.Level > 5);//扩展方法语法
IEnumerable<MartialArtsMaster>
query1 = from n in roles where n.Kongfu.Power > 90 && n.Level > 5 select n; //查询表达式|查询语法
foreach (var role in query1)
{
Console.WriteLine(role.ToString());
}
//orderby 按年龄排序
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>orderby 按年龄排序<<<<<<<<<<<<<<<<<<<<<<<<");
//IEnumerable<MartialArtsMaster> query2 = Enumerable.OrderBy(roles, n => n.Age);//普通静态方法语法
//IEnumerable<MartialArtsMaster> query2 = Enumerable.OrderByDescending(roles, n => n.Age);//普通静态方法语法
//IEnumerable<MartialArtsMaster> query2 = roles.OrderBy(n => n.Age);//扩展方法语法
//IEnumerable<MartialArtsMaster> query2 = roles.OrderByDescending(n => n.Age);//扩展方法语法
//IEnumerable<MartialArtsMaster> query2 = from n in roles orderby n.Age select n;//查询表达式 从小到大排序
IEnumerable<MartialArtsMaster> query2 = from n in roles orderby n.Age descending select n; //查询表达式 从大到小排序
foreach (var role in query2)
{
Console.WriteLine(role.ToString());
}
//流式查询 等级大于8级 按 id从小到大排序 只显示姓名 和 等级
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>流式查询 等级大于8级 按 id从小到大排序 只显示姓名 和 等级<<<<<<<<<<<<<<<<<<<<<<<<");
IEnumerable<string> query3 = roles
.Where(n => n.Level > 8)
.OrderBy(n => n.Id)
.Select(n => string.Format("姓名:" + n.Name + ",等级:" + n.Level));
foreach (var role in query3)
{
Console.WriteLine(role);
}
//查询表达式 等级大于8级 按 id从小到大排序 只显示姓名 和 等级
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>查询表达式 等级大于8级 按 id从小到大排序 只显示姓名 和 等级<<<<<<<<<<<<<<<<<<<<<<<<");
IEnumerable<string> query4 = from n in roles
where n.Level > 8
orderby n.Id
select "姓名:" + n.Name + ",等级:" + n.Level;
foreach (var role in query4)
{
Console.WriteLine(role);
}
//混合查询 等级大于8级 按 id从小到大排序 只显示姓名 和等级
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>混合查询 等级大于8级 按 id从小到大排序 只显示姓名 和等级<<<<<<<<<<<<<<<<<<<<<<<<");
IEnumerable<string> query5 = (from n in roles where n.Level > 8 select n).OrderBy(n => n.Id)
.Select(n => "姓名:" + n.Name + ",等级:" + n.Level);
foreach (var role in query5)
{
Console.WriteLine(role);
}
//Skip Take Reverse 查询与算符
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>Skip Take Reverse 查询与算符<<<<<<<<<<<<<<<<<<<<<<<<");
IEnumerable<MartialArtsMaster> query6 = roles.Skip(5);
Console.WriteLine("一条华丽的分隔线:Skip");
foreach (var role in query6)
{
Console.WriteLine(role);
}
Console.WriteLine();
IEnumerable<MartialArtsMaster> query7 = roles.Take(5);
Console.WriteLine("一条华丽的分隔线:Take");
foreach (var role in query7)
{
Console.WriteLine(role);
}
Console.WriteLine();
int[] numbers= {1,2,3};
IEnumerable<int> query8 = numbers.Reverse();
foreach (var i in query8)
{
Console.Write(i+",");
}
//First:提取输入序列中的第一个元素、Last:提取输入序列中的最后一个元素、ElementAt:提取输入序列中指定下标的元素
Console.WriteLine("First:提取输入序列中的第一个元素、Last:提取输入序列中的最后一个元素、ElementAt:提取输入序列中指定下标的元素");
MartialArtsMaster query9 = roles.First();
Console.WriteLine("一条华丽的分隔线:First");
Console.WriteLine(query9);
Console.WriteLine();
MartialArtsMaster query10 = roles.Last();
Console.WriteLine("一条华丽的分隔线:Last");
Console.WriteLine(query10);
Console.WriteLine();
MartialArtsMaster query11 = roles.ElementAt(5);
Console.WriteLine("一条华丽的分隔线:ElementAt");
Console.WriteLine(query11);
Console.WriteLine();
//聚合运算符Count、Min
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>聚合运算符Count、Min<<<<<<<<<<<<<<<<<<<<<<<<");
int query12 = roles.Count();
Console.WriteLine("一条华丽的分隔符:Count");
Console.WriteLine(query12);
Console.WriteLine();
int query13 = roles.Min(n=>n.Kongfu.Power);
Console.WriteLine("一条华丽的分隔符:Min");
Console.WriteLine(query13);
Console.WriteLine();
//判断运算符Contains、Any
Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>判断运算符Contains、Any<<<<<<<<<<<<<<<<<<<<<<<<");
int[] numbers2 = {5, 9, 1, 2, 6};
bool hasLevelTen = numbers.Contains(5);
Console.WriteLine("一条华丽的分隔符:Contains");
Console.WriteLine(hasLevelTen);
Console.WriteLine();
bool hasMoreThanZeroElement = numbers.Any();
Console.WriteLine("一条华丽的分隔符:Any");
Console.WriteLine(hasMoreThanZeroElement);
Console.WriteLine();
//Concat、Union运算符
int[] seq1 = {1, 2, 3};
int[] seq2 = {3, 4, 5};
IEnumerable<int> query14 = seq1.Concat(seq2);
Console.WriteLine("一条华丽的分隔符:Concat");
foreach (var i in query14)
{
Console.Write(i+",");
}
Console.WriteLine();
IEnumerable<int> query15 = seq1.Union(seq2);
Console.WriteLine("一条华丽的分隔符:Union");
foreach (var i in query15)
{
Console.Write(i+",");
}
Console.WriteLine();
}
/// <summary>
/// 初始化人物和功夫
/// </summary>
class Init
{ /// <summary>
///返回一个人物列表
/// </summary>
/// <returns></returns>
public List<MartialArtsMaster> Role(List<Kongfu> kongfus)
{
var masterList = new List<MartialArtsMaster>()
{
new MartialArtsMaster() {Id = 1, Name = "黄蓉", Age = 18, Menpai = "丐帮", Kongfu = kongfus[0], Level = 9},
new MartialArtsMaster() {Id = 2, Name = "洪七公", Age = 70, Menpai = "丐帮", Kongfu = kongfus[0], Level = 10},
new MartialArtsMaster() {Id = 3, Name = "郭靖", Age = 22, Menpai = "丐帮", Kongfu = kongfus[1], Level = 10},
new MartialArtsMaster() {Id = 4, Name = "任我行", Age = 50, Menpai = "明教", Kongfu = kongfus[2], Level = 1},
new MartialArtsMaster() {Id = 5, Name = "东方不败", Age = 35, Menpai = "明教", Kongfu = kongfus[2], Level = 10},
new MartialArtsMaster() {Id = 6, Name = "林平之", Age = 23, Menpai = "华山", Kongfu = kongfus[2], Level = 7},
new MartialArtsMaster() {Id = 7, Name = "岳不群", Age = 50, Menpai = "华山", Kongfu = kongfus[2], Level = 8},
new MartialArtsMaster() {Id = 8, Name = "令狐冲", Age = 23, Menpai = "华山", Kongfu = kongfus[3], Level = 10},
new MartialArtsMaster() {Id = 9, Name = "梅超风", Age = 23, Menpai = "桃花岛", Kongfu = kongfus[4], Level = 8},
new MartialArtsMaster() {Id = 10, Name = "黄药师", Age = 23, Menpai = "梅花岛", Kongfu = kongfus[5], Level = 10},
new MartialArtsMaster() {Id = 11, Name = "风清扬", Age = 23, Menpai = "华山", Kongfu = kongfus[3], Level = 10}
};
return masterList;
}
/// <summary>
/// 返回一个功夫列表
/// </summary>
/// <returns></returns>
public List<Kongfu> Kongfus()
{
var kongfuList = new List<Kongfu>()
{
new Kongfu() {Id = 1, Name = "打狗棒法", Power = 90},
new Kongfu() {Id = 2, Name = "降龙十八掌", Power = 95},
new Kongfu() {Id = 3, Name = "葵花宝典", Power = 100},
new Kongfu() {Id = 4, Name = "独孤九剑", Power = 100},
new Kongfu() {Id = 5, Name = "九阴真经", Power = 100},
new Kongfu() {Id = 6, Name = "弹指神通", Power = 100}
};
return kongfuList;
}
}
/// <summary>
/// 一个人物类
/// </summary>
class MartialArtsMaster
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Menpai { get; set; }
public Kongfu Kongfu { get; set; }
public int Level { get; set; }
//重写ToString方法
public override string ToString()
{
return string.Format("Id: {0}, Name: {1}, Age: {2}, Menpai: {3}, Kongfu: {4}, Level: {5}", Id, Name, Age, Menpai, Kongfu.Name, Level);
}
}
/// <summary>
/// 一个功夫类
/// </summary>
class Kongfu
{
public int Id { get; set; }
public string Name { get; set; }
public int Power { get; set; }
public override string ToString()
{
return string.Format("Id: {0}, Name: {1}, Power: {2}", Id, Name, Power);
}
}
}
}