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));
                }

            }

  • 相关阅读:
    算法----(1)冒泡排序
    淘宝爬虫
    爬虫_豆瓣电影top250 (正则表达式)
    爬虫_猫眼电影top100(正则表达式)
    Android 简单调用摄像头
    Android 简单天气预报
    思维模型
    This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you
    Android studio preview界面无法预览,报错render problem
    Android studio 3.1.2报错,no target device found
  • 原文地址:https://www.cnblogs.com/RuiLei/p/812978.html
Copyright © 2011-2022 走看看