ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Linq

2021-09-06 01:32:15  阅读:230  来源: 互联网

标签:Console Kungfu ko Linq item WriteLine var


Linq语句

 

Linq查询表达式以from开头select或group结尾

2021-09-06
         


7


 
 

 



 
 

1

from :指定查询操作的数据源和范围变量
2
join :连接多个用于查询操作的数据源  , 输出相同的值
3
into :提供一个临时标识符,join子句,group子句,或select子句均可以通过该标识符引用查询操作的中间结果
4
let  :引入用来临时保存查询表达式中的字表达式结果的范围变量
5
where:指定筛选元素的逻辑条件
6
orderby:对查询结果进行顺序操作,包括升序和降序
7
select:指定查询结果的类型和表现形式
   

代码

         


143


 
 

 



 
 

1

using System;
2
using System.Linq;
3




4

namespace Linq
5
{
6
    class Program
7
    {
8
        static bool Bl(int a) 
9
        {
10
            return a % 2 == 0 ? true : false;
11
        }
12




13

        static void Main(string[] args)
14
        {
15
            int[] Array = { 1, 2, 4, 5, 6, 7, 8 };
16




17

            var La = from a in Array
18
                     select a;
19




20

            var La2 = from a in Array
21
                      where a < 2
22
                      select a;
23




24

            foreach (var a in La)
25
                Console.WriteLine("La = " + a);
26




27

            foreach (var a in La2)
28
                Console.WriteLine("La2 = " + a);
29




30

            Console.WriteLine("L2第一个元素 = " + La2.First());
31




32

            //两个数组相加,
33
            int[] A1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
34
            int[] A2 = { 1, 2, 3, 4, 5, 6, 7, 8 };
35
            var Lin = from a1 in A1
36
                      from a2 in A2
37
                      select a1 + a2;
38




39

            foreach (var item in Lin)
40
            {
41
                Console.Write(item + "  ");
42
            }
43




44

            //给结果值添加名称:i=1 , name = 1
45
            int[] A3 = { 1, 2, 3, 4, 5, 6, 7, 8 };
46
            var Lin2 = from a1 in A3
47
                       select new
48
                       {
49
                           i = a1,
50
                           name = a1.ToString()
51
                       };
52
            foreach (var L in Lin2)
53
            {
54
                Console.WriteLine("Lin2 = " + L);
55
            }
56




57

            //对每个值乘10
58
            int[] A4 = { 1, 2, 3, 4, 5, 6, 7, 8 };
59
            var Lin3 = from a in A4
60
                       select a * 10;
61
            Console.WriteLine("Lin3 = " + Lin3.First());
62




63

            //where判断语句
64
            int[] A5 = { 1, 2, 3, 4, 5, 6, 7, 8 };
65
            var Lin4 = from a in A5
66
                       where a > 7
67
                       select a;
68




69

            //判断是偶数还是奇数,偶数显示奇数不显示
70
            int[] A6 = { 1, 2, 3, 4, 5, 6, 7, 8 };
71
            var Lin5 = from a in A6
72
                       where Bl(a)
73
                       select a;
74
            foreach (var i in Lin5)
75
            {
76
                Console.WriteLine("判断语句包含函数 =   " + i);
77




78

            }
79




80

            //let语句, n = a % 2 (=偶数) ,where n == 0 (=偶数)  
81
            int[] A7 = { 1, 2, 3, 4, 5, 6, 7, 8 };
82
            var Lin6 = from a in A7
83
                       let n = a % 2
84
                       where n == 0
85
                       select a;
86
            foreach (var item in Lin6)
87
            {
88
                Console.WriteLine(" let语句 =   " + item);
89
            }
90




91

            //降序或升序
92
            var Lin7 = from a in A7
93
                       orderby a descending //ascending
94
                       select a;
95
            foreach (var item in Lin7)
96
            {
97
                Console.WriteLine(" 升序或降序 =    " + item);
98
            }
99




100

            //group  by  分组语句
101
            var Lin8 = from a in A7
102
                       group a by a % 2;
103




104

            foreach (var i in Lin8)
105
            {
106
                foreach (var j in i)
107
                {
108
                    Console.WriteLine("group分组语句 =   " + j);
109




110

                }
111
            }
112




113

            //group and into
114




115

            var Lin9 = from a in A7
116
                       group a by a % 2 into Aa
117
                       from InTo in Aa
118
                       select InTo;
119




120

            foreach (var i in Lin9)
121
            {
122
                Console.WriteLine("group and into =   " + i);
123
            }
124




125

            // join语句,连接两个数组,判断Array1和Array2相同的值
126




127

            int[] Array1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
128
            int[] Array2 = { 1, 78, 3, 4, 5, 84, 7, 8, 98 };
129




130

            var Query = from a in Array1
131
                        join b in Array2 on a equals b
132
                        select a;
133




134

            foreach (var i in Query)
135
            {
136
                Console.WriteLine("Join =   "+i);
137
            }
138




139





140

        }
141
    }
142
}
143







 
 





深入_SelectMany();  存在多个from语句时使用

         


24


 
 

 



 
 

1

            //常规方法-------------------------------------
2
var Linq2 = from a in _Name
3
            from b in _Birth
4
            where a.height < b.Min_Height
5
            orderby a.Id
6
            select "姓名: " +a.Name+ " 年龄: "+a.Age + " 体重: "+a.Weight + " 身高: "+a.height + " 最低身高: "+b.Min_Height + " 最低体重 "+b.Max_Height + "\n";
7




8

            Console.WriteLine("不符合条件的有:");
9
            foreach (var item in Linq2)
10
            {
11
                Console.WriteLine(item);
12
            }
13




14

//SelectMany()  --------使用方式------------------------------
15
            var Linq2_J = _Name.SelectMany(B => _Birth, (N, B) => new { n = N, b = B })
16
                .Where(N => N.n.height < N.b.Min_Height)
17
                .OrderBy(N => N.n.Id)
18
                .Select(N=> "姓名: " + N.n.Name + " 年龄: " + N.n.Age + " 体重: " + N.n.Weight + " 身高: " + N.n.height + " 最低身高: " + N.b.Min_Height + " 最低体重 " + N.b.Max_Height + "\n");
19




20

            Console.WriteLine("不符合条件的有:");
21
            foreach (var item in Linq2_J)
22
            {
23
                Console.WriteLine(item);
24
            }
             


25


 
 

 



 
 

1

            //方法1-----------------------------------
2
var i = 1;
3
            var Linq3 = from a in _Name
4
                        from b in _Birth
5
                        where a.Kungfu == b.Kungfu
6
                        orderby a.ko * b.ko descending, a.Age, a.Name
7
                        select "Id: " + a.Id + " 姓名: " + a.Name + " 所练功夫: " + a.Kungfu + " 排位: " + (i++);
8
            Console.WriteLine("全武林武力值排行榜:");
9
            foreach (var item in Linq3)
10
            {
11
                Console.WriteLine(item);
12
            }
13
//方法2----------------------------------------------------------
14
            i = 1;
15
            var Linq3_J = _Name.SelectMany(B => _Birth, (N, B) => new { n = N, b = B })
16
                .Where(C => C.n.Kungfu == C.b.Kungfu)
17
                .OrderByDescending(C => C.n.ko * C.b.ko)
18
                .ThenBy(C => C.n.Name)
19
                .Select(C=>"ID= "+ C.n.Id+" 姓名: "+C.n.Name+" 所练功夫: "+C.n.Kungfu+"武力值:" + (C.n.ko * C.b.ko) + " 排位: "+(i++));
20




21

            Console.WriteLine("全武林武力值排行榜:");
22
            foreach (var item in Linq3_J)
23
            {
24
                Console.WriteLine(item);
25
            }
    SelectMany()

Join语句

         


22


 
 

 



 
 

1

int J = 1;
2
            var Linq4 = from a in _Birth
3
                        where a.ko > 60
4
                        orderby a.ko descending
5
                        select new {id = a.Id,kungfu = a.Kungfu,ko=a.ko,top = (J++) };
6
            int Ji = 1;
7
            var Linq4_J = _Name.Where(b => b.ko > 6)
8
                                .OrderByDescending(b => b.ko)
9
                                .Select(b=>new {id=b.Id,name = b.Name,ko = b.ko ,kungfu = b.Kungfu ,top = (Ji++) });
10
//连接两个对象进行比较胜负
11
            int Jii = 1;
12
            var Linq5 = from a in Linq4
13
                        join b in Linq4_J on a.kungfu equals b.kungfu
14
                        orderby a.ko * b.ko descending
15
                         select new { id = b.id, name = b.name, ko = (a.ko * b.ko)
16
                        ,kungfu = a.kungfu,Birth = a.top, name_top = b.top, top = Jii++};
17
//方法二:使用拓展方法
18
int Jiii = 1;
19
            var Linq5_J = Linq4.Join(Linq4_J, a => a.kungfu, b => b.kungfu, (A, B) =>
20
            new { id = B.id, name = B.name, ko = (B.ko * A.ko), kungfu = A.kungfu, 
21
                    Birth = A.top, name_top = B.top, top = (Jiii++) })
22
            .OrderByDescending(m=>m.ko);
    Join

对武林功夫进行排序,此方法是透过count计数排序,判断该武功有多少人使用,从而做到分组

         


19


 
 

 



 
 

1

            //Linq
2
            var Linq6 = from a in _Birth
3
                        join b in _Name on a.Kungfu equals b.Kungfu into Groups
4
                        orderby Groups.Count() descending
5
                        select new {Id = a.Id , Kungfu = a.Kungfu , ko = a.ko ,count = Groups.Count() };
6
            Console.WriteLine("功夫使用人数分组:");
7
            foreach (var item in Linq6)
8
            {
9
                Console.WriteLine("ID: "+item.Id+" 功夫: "+item.Kungfu+" 武力值: "+item.ko +" 此武功使用人数: "+item.count );
10
            }
11




12

            //拓展方法
13
            var Linq6_J = _Birth.GroupJoin(_Name, A => A.Kungfu, B => B.Kungfu, (A, B) => new { A.Id, A.Kungfu, A.ko, count = B.Count() })
14
                .OrderByDescending(C=>C.count);
15
            Console.WriteLine("功夫使用人数分组:");
16
            foreach (var item in Linq6_J)
17
            {
18
                Console.WriteLine("ID: "+item.Id+" 功夫: "+item.Kungfu+" 武力值: "+item.ko+" 此功夫使用人数: "+item.count );
19
            }
    GroupJoin()

对武林武功进行排序,此方法是透过id安id大小排序做到分组

         


20


 
 

 



 
 

1

//Linq语句
2
var Linq7 = from a in _Birth
3
            join b in _Name on a.Kungfu equals b.Kungfu
4
            orderby a.Id
5
            select new { Id = a.Id, name = b.Name, Kungfu = a.Kungfu, ko = (a.ko * b.ko) };
6




7

            Console.WriteLine("joinorGroup分组");
8
            foreach (var item in Linq7)
9
            {
10
                Console.WriteLine("Id= " + item.Id + " 姓名: " + item.name + " 所练功夫: " + item.Kungfu + " 武力值: " + item.ko);
11
            }
12
//拓展方法
13
            var Linq7_J = _Birth.GroupJoin(_Name, A => A.Kungfu, B => B.Kungfu, (A, B) => new { Id = A.Id, count = B.Count(), Kungfu = A.Kungfu })
14
                                .OrderBy(m=>m.Id);
15




16

            Console.WriteLine("joinorGroup分组");
17
            foreach (var item in Linq7_J)
18
            {
19
                Console.WriteLine("Id= " + item.Id  + " 所练功夫: " + item.Kungfu+" 使用人数: "+item.count);
20
            }
   

Group分组武功,linq与Groupby();

         


19


 
 

 



 
 

1

            //linq语句
2
var Linq8 = from a in _Name
3
                        group a by a.Kungfu into b
4
                        orderby b.Key
5
                        select new {kungfu = b.Key,count = b.Count() };
6




7

            Console.WriteLine("分组个各武功使用数");
8
            foreach (var item in Linq8)
9
            {
10
                Console.WriteLine("功夫名: "+item.kungfu+" 使用人数: "+item.count);
11
            }
12
//拓展方法
13
            var Lin8_J = _Name.GroupBy(a=>a.Kungfu,(A,B)=>new {kungfu =A,count = B.Count() })
14
                                .OrderBy(m=>m.kungfu);
15
            Console.WriteLine("分组个各武功使用数");
16
            foreach (var item in Lin8_J)
17
            {
18
                Console.WriteLine("功夫名: " + item.kungfu + " 使用人数: " + item.count);
19
            }
   

判断对象里面是否包含指定内容 变量.Any();

         


2


 
 

 



 
 

1

bool lbwb = Lin8_J.Any(v=>v.kungfu == "凌波微步");//判断对象是否包含用凌波微步的人
2
            Console.WriteLine("是否含有使用凌波微步的人:"+lbwb);//返回布尔值
    判断是否所有对象都一致: 变量.All();          


2


 
 

 



 
 

1

bool xlsbz = Lin8_J.All(v=>v.kungfu == "降龙十八掌");
2
            Console.WriteLine("所有人都使用降龙十八掌:"+xlsbz);
    判断对象里面是否包含某个对象          


3


 
 

 



 
 

1

var QiaoFeng = _Name[5]; 
2
            bool IsQiaoFeng = _Name.Contains(QiaoFeng);//判断某对象是否存在
3
            Console.WriteLine("江湖中是否存在乔峰这个人:"+IsQiaoFeng);
    算出对象总数和页码          


1


 
 

 



 
 

1








 
 



分页


 
 
 
 
 








11


 
 

 



 
 

1

            double Page = 10;//每页数量
2
            int name_count = _Name.Count();//对象总数
3
            double count = Math.Ceiling(name_count / Page);//计算总共有多少页
4
            Console.WriteLine("当前对象总页数:"+count+" 当前对象总数:"+ name_count);
5




6

            var Linq9 = (from a in _Name
7
                         join b in _Birth on a.Kungfu equals b.Kungfu
8
                         orderby a.ko * b.ko descending
9
                         select new { name = a.Name, Kungfu = b.Kungfu, ko = a.ko * b.ko })
10
                         .Skip(0 * (int)Page)     // 0 *Page = 第一页,以此类推
11
                         .Take((int)Page);        // 返回指定数量(Page)元素
    对比两个值返回值相同的集合          


9


 
 

 



 
 

1

//如果功夫为 降龙十八掌 和武力值为 10 就能返回
2
var Linq10 =(from a in _Name where a.Kungfu == "降龙十八掌" select a)
3
            .Intersect(from b in _Name where b.ko == 10 select b);//Intersect:返回比较值相同的集合
4




5

            Console.WriteLine("\n比较两个值返回值相同的集合:");
6
            foreach (var item in Linq10)
7
            {
8
                Console.WriteLine(" 姓名 "+item.Name+" 功夫 "+item.Kungfu +" 等级 "+item.ko);
9
            }
    累加:Aggregate          


5


 
 

 



 
 

1

            int[] array = { 1,2,3,4,5,6};
2
            int arr1 = array.Aggregate((a,b)=>a+b);                     //Aggregate累加 最后结果=21
3
            int arr2 = array.Aggregate(0,(a,b)=>a+b , r=>r*2);         //Aggregate累加 最后结果=42
4
            int arr3 = array.Aggregate(9,(a,b)=>a+b);                 //Aggregate累加 最后结果=30
5
            Console.WriteLine(arr1 +" "+ arr2 + " " + arr3);
      linq模糊查询          


57


 
 

 



 
 

1

1.判断是否为空或者null
2




3

string.IsNullOrEmpty(des.PlateNum)————————>sql server的PlateNum is null的判断
4




5

from des in db.ModelsVehicleRecognition where (!string.IsNullOrEmpty(des.PlateNum)) select new { plateMun = des.PlateNum }
6




7

等同于
8




9

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum IS NOT NULL
10




11

2.普通包含模糊查询
12




13

1)以某字符串开头的模糊查询
14




15

des.PlateNum.StartsWith("皖A8") ————————>sql server 的   like '皖A8%'
16




17

from des in db.ModelsVehicleRecognition where (des.PlateNum.StartsWith("皖A8")) select new { plateMun = des.PlateNum }
18




19

等同于
20




21

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum  like '皖A8%'
22




23

2)以某字符串结尾的模糊查询
24




25

des.PlateNum.EndsWith("68T") ————————>sql server 的   like '%68T'
26




27

from des in db.ModelsVehicleRecognition where (des.PlateNum.EndsWith("68T")) select new { plateMun = des.PlateNum }
28




29

等同于
30




31

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum  like '%68T'
32




33

3)包含某字符串的模糊查询
34




35

des.PlateNum.Contains("A3") ————————>sql server 的   like '%A3%'
36




37

from des in db.ModelsVehicleRecognition where (des.PlateNum.Contains("A3")) select new { plateMun = des.PlateNum }
38




39

等同于
40




41

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum  like '%A3%'
42




43

3.精确到字符串对应位数字符的模糊查询(*重点)
44




45

SqlFunctions.PatIndex("_a__3%", des.PlateNum) > 0————————>sql server 的   like '_a__3%'
46




47

from des in db.ModelsVehicleRecognition where (SqlFunctions.PatIndex("_a__3%", des.PlateNum) > 0) select new { plateMun = des.PlateNum }
48




49

等同于
50




51

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum  like '_a__3%'
52




53

说明:'_a__3%' 中的下划线“_”表示一个字符,'_a__3%' 这个字符串查询意思就是第二个字符是a,第五个字符是3的字符串
54




55

       因为a和3之间有两个下划线“_”所以查询出的结果也要满足a和3之间有两个字符才行,
56




57

       也就是说两个精确字符之间隔了几个字符,在查询的时候就要写几个下划线“_”。
   

标签:Console,Kungfu,ko,Linq,item,WriteLine,var
来源: https://www.cnblogs.com/rdr2/p/15232089.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有