zoukankan      html  css  js  c++  java
  • Linq 入门系列 select篇

    其实也是对网上linq--select篇的扩充
    我在这里把两种语法都写,lambda,linq写法,方便大家更好的去学习,同时也增加了一些新的东西,如解释,例子的扩充。。。

    今后一段时间,我会对linq一些基本写法进行例子和解释结合的方式和大家进行分享。

     class Program
        
    {
            
    private static List<Student> GetStudents()
            
    {
                List
    <Student> students = new List<Student> 
                 
    new Student{ Name="YOUNG", Age=25, Language="Chinese"},
                 
    new Student{ Name="JESSIE", Age=21, Language="Scotland"},
                 
    new Student{ Name="KELLY", Age=18, Language="English"},
                 
    new Student{ Name="JUNE", Age=20, Language="English"},
                 
    new Student{ Name="ADRIAN", Age=22, Language="Italy"},
                 
    new Student{ Name="BRUCE", Age=17, Language="Scotland"},
                 
    new Student{ Name="BRANT", Age=30, Language="Germany"},
                 
    new Student{ Name="BEN", Age=25, Language="Chinese"}
                 }
    ;
                
    return students;

            }


            
    static void Main(string[] args)
            
    {
                List
    <Student> studentList = GetStudents();

                Select(studentList);
            }


            
    private static void Select<T>(T studentList)
            
    {
                OnlySearch(studentList);
                SearchCollectChangeOtherCollect(studentList);
                BuilderAnomy();
                BuilderAnomyExter();
                SelectLambda();
                ComplexSelect();
                ComplexSelectLambda();
            }


            
    private static void OnlySearch<T>(T studentList)
            
    {
                Console.WriteLine(
    "<hr>只查询合适对象集合的某个属性:<br>");

                
    //lamb的写法
                var students = RevealChangeType(studentList).Where(n=>n.Language == "Chinese").Select(n=>n.Name);

                
    //linq的写法
                
    //var students = from n in RevealChangeType(studentList)
                
    //               where n.Language == "Chinese"
                
    //               select n.Name;

                
    foreach (var student in students)
                
    {
                    Console.WriteLine(
    string.Format("<span class='result'>{0}</span>", student));
                }

            }


            
    private static IEnumerable<Student> RevealChangeType<T>(T obj)
            
    {
                IEnumerable
    <Student> student = obj as IEnumerable<Student>;

                
    return student;
            }


            
    private static void SearchCollectChangeOtherCollect<T>(T obj)
            
    {
                Console.WriteLine(
    "<hr>从一个集合中查询,转化到另外一个集合:<br>");

                
    //age Array
                int[] intArray =25143 };

                
    //lamb的写法
                var students = intArray.SelectMany(n=>RevealChangeType(obj).Where(s=>s.Age == n));

                
    //linq的写法
                
    //var students = from s in RevealChangeType(obj)
                
    //               from n in intArray
                
    //               where s.Age == n
                
    //               select s;

                
    foreach (var student in students)
                
    {
                    Console.WriteLine(
    string.Format("<span class='result'>{0}</span>", student.Name));
                }

            }


            
    private static void BuilderAnomy()
            
    {
                Console.WriteLine(
    "<hr>构建匿名类型:<br>");

                List
    <Student> studentList = GetStudents();
                
    int[] intArray = 3164 };

                
    //lamb的写法
                var stu = intArray.Select(n=>new { Id = n, Name = (studentList as List<Student>)[n].Name });

                
    //linq的写法
                
    //var stu = from n in intArray
                
    //          select  new{Id = n,Name=(studentList as List<Student>)[n].Name};

                
    foreach (var s in stu)
                
    {
                    Console.WriteLine(
    string.Format("<div class='result'>id:{0};name:{1}</div>", s.Id, s.Name));
                }

            }


            
    private static void BuilderAnomyExter()
            
    {
                Console.WriteLine(
    "<hr>构建匿名类型2——扩展已有类:<br>");

                List
    <Student> studentList = GetStudents();
                
    int[] intArray = 3164 };

                
    //lamb的写法
                var students = intArray.Select(n=>new { Id = n, studentList[n].Name, studentList[n].Age });

                
    //linq的写法
                
    //var students = from n in intArray
                
    //               select new {Id = n, studentList[n].Name, studentList[n].Age};

                
    foreach (var student in students)
                
    {
                    Console.WriteLine(
    string.Format("<div class='result'>id:{0}; name:{1}; age:{2}</div>", student.Id, student.Name, student.Age));
                }

            }


            
    private static void SelectLambda()
            
    {
                Console.WriteLine(
    "<hr>select的Lambda表达式:<br>");

                List
    <Student> studentList = GetStudents();
                
    int[] intArray = 3164 };

                
    //lamb的写法
                var stu = intArray.Select(i=>new { Id = i, studentList[i].Name });

                
    //linq的写法
                
    //var stu = from i in intArray
                
    //          select new {Id = i, studentList[i].Name};

                
    foreach (var student in stu)
                
    {
                    Console.WriteLine(
    string.Format("<div class='result'>id:{0}; name:{1}</div>", student.Id, student.Name));
                }

            }


            
    private static void ComplexSelect()
            
    {
                Console.WriteLine(
    "<hr>复合选择:<br>");

                List
    <Student> studentList = GetStudents();
                
    string[] stringArray = "Ajax""Csharp""Javascript""Css Desige""Asp.net""Gis" };

                
    //lamb的写法
                
    //var stu = stringArray.Where(s=>s.Length > 8).SelectMany(s=>studentList.Where(str1=>str1.Age > 23).Select(str=>new { book = s, name = str.Name }));
                var stu = studentList.Where(sl=>sl.Age > 23).SelectMany(sl=>stringArray.Where(s=>s.Length > 8).Select(s=>new { name = sl.Name, book = s }));

                
    //linq的写法
                
    //var stu = from sl in studentList 
                
    //           where sl.Age > 23
                
    //           from s in stringArray 
                
    //           where s.Length > 8
                
    //           select new {name = sl.Name, book = s};

                
    foreach (var student in stu)
                
    {
                    Console.WriteLine(
    string.Format("<div class='result'>{0} is studying {1}</div>", student.name, student.book));
                }

            }


            
    private static void ComplexSelectLambda()
            
    {
                Console.WriteLine(
    "<hr>多重选择的Lambda表达式:<br>");

                List
    <Student> studentList = GetStudents();
                
    string[] stringArray = "Ajax""Csharp""Javascript""Css Desige""Asp.net""Gis" };

                
    //lamb的写法
                
    //var stu = studentList.SelectMany(s=>stringArray.Select(str => s.Name + "has a book names " + str));

                
    //linq的写法
                var stu = from sl in studentList                     
                          from s 
    in stringArray                      
                          select 
    new {name=sl.Name,language=s};

                
    foreach (var s in stu)
                
    {
                    Console.WriteLine(
    string.Format("<div class='result'>{0}</div>", s));
                }

            }

        }


        
    sealed class Student
        
    {
            
    public int age;
            
    public int Age
            
    {
                
    get return age; }
                
    set { age = value; }
            }


            
    private string name;
            
    public string Name
            
    {
                
    get return name; }
                
    set { name = value; }
            }


            
    private string language;
            
    public string Language
            
    {
                
    get return language; }
                
    set { language = value; }
            }

        }

    对此方法的补充
       ComplexSelectLambda()
    **********************************
    但是现在(ComplexSelectLambda())输出的结果是:
    <hr>多重选择的Lambda表达式:<br/>
    <div class='result'>{name=YOUNG, language=Ajax}</div>
    <div class='result'>{name=YOUNG, language=Csharp}</div>
    <div class='result'>{name=YOUNG, language=Javascript}</div>
    <div class='result'>{name=YOUNG, language=Css Desige}</div>
    <div class='result'>{name=YOUNG, language=Asp.net}</div>
    <div class='result'>{name=YOUNG, language=Gis}</div>
    **********************************

    //////////////////////////////////
    问题:如何写才能输入这样的结果?
         
    <name=young,language=Ajax>
    <name=JESSIE,language=Csharp>
    <name=KELLY,language=Javascript>
    <name=JUNE,language=Css Desige>
    <name=ADRIAN,language=Asp.net>
    <name=BRUCE,language=Gis>
    //////////////////////////////////

    代码:
    private static void ComplexSelectLambdaTwo()
            
    {
                Console.WriteLine(
    "<hr>多重选择的Lambda表达式:<br>");

                List
    <Student> studentList = GetStudents();
                
    string[] stringArray = "Ajax""Csharp""Javascript""Css Desige""Asp.net""Gis" };

                var langlist 
    = stringArray.Select(( la, i) => new { lang = la, index = i });

                var stulist 
    = studentList.Select(( st, i) => new { name = st.Name, index = i });

                var stu2 
    = from la in langlist
                           from st 
    in stulist
                           where la.index 
    == st.index
                           select 
    new {name = st.name, language = la.lang};

                
    foreach (var s2 in stu2)
                
    {
                    Console.WriteLine(
    string.Format("<name={0},language={1}>", s2.name, s2.language));
                }

            }

  • 相关阅读:
    mac下安装golang
    go run/ go install/ go build / go get的区别
    git报错The authenticity of host 'github.com (13.229.188.59)' can't be established. RSA key fingerprint is。。。
    2. Java内存区域
    4. 垃圾回收- 4.1判断对象是否存活算法
    1. 各种虚拟机的发展历史
    springBoot多数据源(不同类型数据库)项目
    Linux shell脚本启动 停止 重启jar包
    IDEA云盘下载
    GitHub配置
  • 原文地址:https://www.cnblogs.com/RuiLei/p/812978.html
Copyright © 2011-2022 走看看