zoukankan      html  css  js  c++  java
  • c#中Linq查询语句

    代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace CSharp
    {
        class Linq
        {
            public static void Show(List<Product> fruits)
            {
                foreach (var itme in fruits)
                {
                    Console.WriteLine("编号:{0},商品名称:{1},商品价格:{2},商品品牌:{3},商品型号:{4}", itme.Id, itme.Name, itme.Price, itme.Brand, itme.Sell);
                }
            }
            static void Main(string[] args)
            {
                //匿名对象:在方法里面可以直接使用不需要传递,减少代码提高效率
                var ff = new { name = "张三", age = 19 };//这种叫 匿名对象 语法:var 变量名 = { };
                Console.WriteLine(ff.name);
                Console.WriteLine("------------------");
    
                //对象集合初始化器
                List<string> fruits = new List<string>() { "苹果", "香蕉", "西瓜" };
                fruits.Add("蜜罐");
    
                Console.Write("请输入水果名:");
                string str = Console.ReadLine();
                //原来的做法(赋值查询)foreach来遍历输出
                foreach (var itme in fruits)
                {
                    if (itme.Contains(str)) Console.WriteLine("你输入的水果:" + itme);
                }
    
                //linq语法:Select * from 数据源(表明)
                var reus = from f in fruits //数据源:也就是一个集合,遍历list
                           orderby f descending //orderby排序(默认的升序) 跟 descending降序   (ascending升序)
                           select f;//显示结果返回给reus变量,可查询字段(如果查询全部直接放变量名) 就像f是变量名  数据库字段 f.id 这种得到字段的所有值
                Console.WriteLine("--------降序排列---------");
                foreach (var itme in reus)
                {
                    Console.WriteLine(itme);
                }
    
                List<Product> plist = new List<Product>() {
                    new Product() { Id = 1, Name = "a冰箱", Price = 2300, Brand = "西门子", Sell = "B201",lover = new List<string>(){ "苹果", "香蕉", "西瓜" }},
                    new Product() { Id = 1, Name = "b冰箱", Price = 2400, Brand = "西门子", Sell = "B201",lover = new List<string>(){ "木瓜", "芒果", "地瓜" }},
                    new Product() { Id = 3, Name = "c冰箱", Price = 2500, Brand = "西门子", Sell = "B201",lover = new List<string>(){ "橘子", "柿子", "水果" }},
                    new Product() { Id = 4, Name = "d冰箱", Price = 2600, Brand = "西门子", Sell = "B201",lover = new List<string>(){ "柚子", "香瓜", "西瓜" }}
                };
                Console.Write("请输入商品名称:");
                string name = Console.ReadLine();
                Console.Write("请输入商品价格:");
                string price = Console.ReadLine();
    
                //linq语法
                var reuslt = from f in plist//数据源:也就是一个集合,遍历list
                             orderby f.Id, f.Name descending, f.Price //默认所有字段都是ascending升序排列 所以不写  然后某个加上descending变成降序
                             where (String.IsNullOrEmpty(name) || f.Name == name) && (String.IsNullOrEmpty(price) || f.Price == Convert.ToInt32(price))
                             select f;//显示结果返回给reuslt对象    IsNullOrEmpty用来表示name为空  前面加!不为空
                Console.WriteLine("--------降序排列---------");
                Show(reuslt.ToList());//显示数据的方法
                //*************************************************************************************************************************************
    
                Console.Write("请输入爱好:");
                string lovers = Console.ReadLine();
    
                List<string> loverlist = lovers.Split(',').ToList();//根据用户输入爱好 ,号来划分字符串 
                //复合的from子句:可以解决多对多查询,查询条件是一个集合,数据源也是一个集合
                var reuslt1 = from f in plist//数据源也是一个集合:使用复合子句把数据源集合变成一个一个的字符串
                              from loveritem in f.lover
                              where loverlist.Contains(loveritem) //查询条件是一个集合
                              select f;
                Console.WriteLine("--------复合的from子句:爱好条件也可以是一个集合来查询---------");
                Show(reuslt1.ToList());//显示数据的方法
    
                //*************************************************************************************************************************************
                Console.WriteLine("--------复合Select子句查询单个字段---------");
                var reuslt2 = from f in plist//数据源
                              from loveritem in f.lover
                              where loverlist.Contains(loveritem)
                              select f.Name; //复合字句查询,单个字段不是全部字段
    
                List<string> unamelist = reuslt2.ToList();
    
                foreach (var item in unamelist)
                {
                    Console.WriteLine(item);
                }
                //***************************************************************************************************************************************
                Console.WriteLine("--------复合Select子句查询多个字段:---------");
                var reuslt3 = from f in plist//数据源
                              from loveritem in f.lover
                              where loverlist.Contains(loveritem)
                              select new
                              { //复合字句查询,多字段
                                  a = f.Id,
                                  b = f.Name,
                                  c = f.Price
                              };
    
                foreach (var item in reuslt3)
                {
                    Console.WriteLine("编号:{0},产品名:{1},价格:{2}", item.a, item.b, item.c);
                }
    
    
                Console.ReadLine();//用来暂定
            }
        }
    
        /// <summary>
        /// 实体类,网上没有太多解释,我认为解释处理数据的一个载体,prop快速生成字段
        /// </summary>
        public partial class Product
        {
            //构造方法:与类同名,且没有返回值。作用:初始化类的成员。运行时:创建对象(new)的时候就会执行构造方法
            /// <summary>
            /// 有参构造方法:这种写发相当于 调用时候 new Product(){}对象  一般用作初始化值 可以这样,调用的时候赋值给他  new Product(1,"洗衣机",999,"格力","B301")
            /// </summary>
            public Product(int Id, string Name, int Price, string Brand, string Sell)
            {
                this.Id = Id;
                this.Name = Name;
                this.Price = Price;
                this.Brand = Brand;
                this.Sell = Sell;
            }
            /// <summary>
            /// 无参构造方法:每个类默认都是有一个“无参构造”,但是类中定义了其他构造,默认的无参构造将不存在,因此必须重新在写一次,说明了构造方法是可以方法重载的。
            /// </summary>
            public Product()
            {
                Console.WriteLine("方法重载:同一个类中【只要方法名相同,参数列表不同】,不关心其他因素,不管有没有返回值都叫方法重载。");
            }
            ~Product()
            {
                Console.WriteLine("析构方法:与类同名,语法 ~类名(){}的方法,不需要被调用。运行时:在类被实例化对象,完成一系列操作后,会执行析构方法里面的代码");
            }
    
            public Nullable<int> Id { get; set; } //Nullable<int>表示值类型也可以赋空值  int? id = null 就不会不错  一般来说int是没有空值 string有
            public string Name { get; set; }
            public int? Price { get; set; } // int?  是 Nullable<int> 的简化 ,不限制值类型,其他类型也可以用 除了字符串本身就可以有空值外加他没意义
            public string Brand { get; set; }
            public string Sell { get; set; }
    
    
    
        }
        /// <summary>
        /// 分部类:关键字 partial【部分】的意思,对应的类名要一样,指定其实就是一个类了
        /// 作用:一个类分成几个来写,最终合并到一起,在asp.net经常看到,对我们代码太多一个类写不下来,就会用 partial 把多类合并起来
        /// </summary>
        public partial class Product
        {
            public List<string> lover { get; set; }//调用Product类时就可以使用上面字段也可以使用这个字段,都是同一个类,是合并类
        }
    }
  • 相关阅读:
    bzoj1093【ZJOI2007】最大半联通子图
    bzoj3609【HEOI2014】人人尽说江南好
    Codeforces Round #381 Div.2
    bzoj3405:[Usaco2009 Open]Grazing2 移动牛棚
    bzoj3389:[Usaco2004 Dec]Cleaning Shifts安排值班
    bzoj3315:[Usaco2013 Nov]Pogo-Cow
    bzoj1018:[SHOI2008]堵塞的交通traffic
    bzoj4637:期望
    二次剩余
    Very Long Suffix Array
  • 原文地址:https://www.cnblogs.com/longxinyv/p/14439088.html
Copyright © 2011-2022 走看看