精华内容
下载资源
问答
  • linq语法
    2020-06-24 18:20:59

    C#语言基础-LINQ语法

    写这两篇文章的目的是为了备忘、 C#语言在大学读书时候学过、当时做过一些东西、但是由于从事的主要工作和C#无关便忘记了。 近来公司增加了Unity业务、 写Unity主要是C# 和js 想来C# 的语法结构和Java很相似、于是采用了C#语言作为公司游戏项目的主要语言。

    本篇文章主要写一下C#语言的LINQ语法、 LINQ属于C#语言特性, 所以我打算用一个例子来说明一下这个一项语法特性。

    
    namespace _LINQ
    {
        internal class Program
        {
            private static void Main(string[] args)
            {
                //初始化武林高手
                var masterList = new List<MartialArtsMaster>()
                {
                    new MartialArtsMaster() {Id = 1, Name = "黄蓉", Age = 18, Menpai = "丐帮", Kongfu = "打狗棒法", Level = 9},
                    new MartialArtsMaster() {Id = 2, Name = "洪七公", Age = 70, Menpai = "丐帮", Kongfu = "打狗棒法", Level = 10},
                    new MartialArtsMaster() {Id = 3, Name = "郭靖", Age = 22, Menpai = "丐帮", Kongfu = "降龙十八掌", Level = 10},
                    new MartialArtsMaster() {Id = 4, Name = "任我行", Age = 50, Menpai = "明教", Kongfu = "葵花宝典", Level = 1},
                    new MartialArtsMaster() {Id = 5, Name = "东方不败", Age = 35, Menpai = "明教", Kongfu = "葵花宝典", Level = 10},
                    new MartialArtsMaster() {Id = 6, Name = "林平之", Age = 23, Menpai = "华山", Kongfu = "葵花宝典", Level = 7},
                    new MartialArtsMaster() {Id = 7, Name = "岳不群", Age = 50, Menpai = "华山", Kongfu = "葵花宝典", Level = 8},
                    new MartialArtsMaster() {Id = 8, Name = "令狐冲", Age = 23, Menpai = "华山", Kongfu = "独孤九剑", Level = 10},
                    new MartialArtsMaster() {Id = 9, Name = "梅超风", Age = 23, Menpai = "桃花岛", Kongfu = "九阴真经", Level = 8},
                    new MartialArtsMaster() {Id = 10, Name = "黄药师", Age = 23, Menpai = "梅花岛", Kongfu = "弹指神通", Level = 10},
                    new MartialArtsMaster() {Id = 11, Name = "风清扬", Age = 23, Menpai = "华山", Kongfu = "独孤九剑", Level = 10}
                };
                //初始化武学
                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}
                };
    
                //查询所有武学级别大于8的武林高手
                //var res = new List<MartialArtsMaster>();
                //foreach (var temp in masterList)
                //{
                //    if (temp.Level > 8)
                //    {
                //        res.Add(temp);
                //    }   
                //}
                //1,使用LINQ做查询( 表达式写法)
                //var res = from m in masterList
                //          //from后面设置查询的集合
                //          where m.Level > 8 && m.Menpai=="丐帮" //通过&&添加并列的条件
                //          //where后面跟上查询的条件
                //          select m;//表示m的结果结合返回
                //2,扩展方法的写法
                //var res = masterList.Where(Test1);
                //var res = masterList.Where(m => m.Level > 8 && m.Menpai=="丐帮" );
    
    
                //3,LINQ 联合查询
                //取得所学功夫的杀伤力大于90 的武林高手
                //var res = from m in masterList
                //    from k in kongfuList
                //    where m.Kongfu == k.Name && k.Power > 90
                //    //select new {master = m, kongfu = k};
                //    select m;
                //扩展方法用法
                //var res =
                //    masterList.SelectMany(m => kongfuList, (m, k) => new {master = m, kongfu = k})
                //        .Where(x => x.master.Kongfu == x.kongfu.Name && x.kongfu.Power>90 );
    
                //4,对查询结果做排序 orderby (descending)
                //var res = from m in masterList
                //          //from后面设置查询的集合
                //          where m.Level > 8 && m.Menpai == "丐帮" //通过&&添加并列的条件
                //          //orderby m.Age descending
                //          orderby m.Level,m.Age //按照多个字段进行排序,如果字段的属性相同,就按照第二个属性排序
                //          //where后面跟上查询的条件
                //          select m;//表示m的结果结合返回
    
                //var res = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮").OrderBy(m => m.Age);
                //var res = masterList.Where(m => m.Level > 8).OrderBy(m => m.Level).ThenBy(m => m.Age);
    
    
                //5,join on 集合联合
                //var res = from m in masterList
                //    join k in kongfuList on m.Kongfu equals k.Name
                //    where k.Power>90
                //    select new {master = m, kongfu = k};
    
                //6,分组查询 into groups (把武林高手按照所学功夫分类,看一下那个功夫修炼的人数最多)
                //var res = from k in kongfuList
                //    join m in masterList on k.Name equals m.Kongfu
                //    into  groups
                //    orderby groups.Count()
                //    select new {kongfu = k, count = groups.Count() };
                
    
                //7,按照自身字段分组 group
                //var res = from m in masterList
                //    group m by m.Kongfu
                //    into g
                //    select new {count = g.Count(), key = g.Key};//g.Key Key表示是按照那个属性分的组
    
                //8,量词操作符 any all 判断集合中是否满足某个条件
                //bool res  = masterList.Any(m => m.Menpai == "长留");
                //Console.WriteLine(res);
                bool res = masterList.All(m => m.Menpai == "丐帮");
                Console.WriteLine(res);
    
    
                //foreach (var temp in res)
                //{
                //    Console.WriteLine(temp);
                //}
                Console.ReadKey();
            }
    
            //过滤方法
            static bool Test1(MartialArtsMaster master)
            {
                if (master.Level > 8) return true;
                return false;
            }
        }
    }
    
      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);
            }
        }
        
        
        /// <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 string Kongfu { get; set; }
            public int Level { get; set; }
    
            public override string ToString()
            {
                return string.Format("Id: {0}, Name: {1}, Age: {2}, Menpai: {3}, Kongfu: {4}, Level: {5}", Id, Name, Age, Menpai, Kongfu, Level);
            }
        }
        
    
    

    类似于SQL语言的语法一样LINQ的语法是不是更简洁简单、灵活一些。

    更多相关内容
  • linq语法实例大全

    2018-05-29 10:43:10
    这本书详细得用各种实例讲解了LINQ的使用规则,覆盖了大部分的应用场景,是学习者很好的参考学习资料
  • 很有价值的文档学习语法指南。。。 sql语句-linq语言-lambda...可以帮助对SQL、linq、lambda表达式存在疑惑不明白的在这里面可以充分提现出来语法间的对比和学习。让你逐渐对linq、lambda表达式有了解甚至使用。。。
  • LINQ语法详解

    千次阅读 2020-08-20 17:23:30
    一、什么是LINQ LINQ(读音link)代表语言集成查询(Language Integrated Query),是.NEt框架的扩展,它允许我们用SQL查询数据库的方式来查询数据的集合,使用它,你可以从数据库、程序对象的集合以及XML文档中查询...

    一、什么是LINQ

    LINQ(读音link)代表语言集成查询(Language Integrated Query),是.NEt框架的扩展,它允许我们用SQL查询数据库的方式来查询数据的集合,使用它,你可以从数据库、程序对象的集合以及XML文档中查询数据

    下面一个简单的示例,可以查询数组中小于8的数字并输出。

    一般步骤:获取数据源、创建查询、执行查询。需要注意的是,尽管查询在语句中定义,但直到最后的foreach语句请求其结果的时候才会执行

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    using System;

    using System.Collections.Generic;

    using System.Linq;

     

    namespace LINK查询

    {

     class Program

     {

     static void Main(string[] args)

     {

      int[] number = { 2, 4, 6, 8, 10 }; //获取数据源

      IEnumerable<int> lowNum = from n in number //创建并存储查询,不会执行操作

         where n < 8

         select n;

     

      foreach(var val in lowNum) //执行查询

      {

      Console.Write("{0} ", val);

      }

     

      Console.ReadKey();

     }

     }

    }

    二、查询表达式的结构

    查询表达式由查询体后的from子句组成,其子句必须按一定的顺序出现,并且from子句和select子句这两部分是必须的。先介绍一下子句

    2.1 from子句

    from子句指定了要作为数据源使用的数据集合,它的语法是:

    1

    from Type Item in Items

    其中Type是集合中元素的类型,是可选的,因为编译器可以从集合来推断类型。  Item是迭代变量的名字。  Items是要查询的集合的名字,必须是可枚举类型的

    它和foreach比较相似,但foreach语句在遇到代码时就执行其主体,二from子句什么也不执行。它创建可以执行的后台代码对象,只有在程序的控制流遇到访问查询变量的语句时才会执行

    2.2  join子句

    如果您对SQL中的join比较熟悉的话,那么LINQ中的join对你来说也不是什么难事,不熟悉的话,,当我没说。

    我们可以使用join来结合两个或更多集合中的数据,它接受两个集合然后创建一个临时的对象集合

    1

    2

    var query = from s in students

      join c in course on s.SID equals c.SID

    equals用于比较相等性的字段,不能使用“==”代替,下面示例中有三个学生和三门课程,我们要做的是查找选修了历史课的学生名

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

     

    namespace LINK查询

    {

     class Program

     {

     public class Student //声明student类

     {

      public int stId; //学生ID

      public string stuName; //学生姓名

     }

     

     public class Course //声明course类

     {

      public int stId; //学生ID

      public string courseName; //课程名

     }

     

     static Student[] students = new Student[]

     {

      new Student {stId = 1,stuName = "jack"},

      new Student {stId = 2,stuName = "taylor"},

      new Student {stId = 3,stuName = "fleming"}

     };

     

     static Course[] courses = new Course[]

     {

      new Course{stId = 1,courseName = "art"},

      new Course{stId = 2, courseName = "art"},

      new Course{stId = 1,courseName = "history"},

      new Course{stId = 3, courseName = "history"},

      new Course{stId = 3,courseName = "physics"},

     };

     

     static void Main(string[] args)

     {

      //查询所有选修了history课的学生名

      var query = from s in students

       join c in courses on s.stId equals c.stId

       where c.courseName == "history"

       select s.stuName;

     

      foreach(string str in query)

      {

      Console.Write("{0} ", str);

      }

      Console.ReadKey();

     }

     }

    }

    输出 jack fleming

    讲解一下查询过程:它会依次使用student中的对象与course中的所有对象进行对比,查找是否符合 s.stId equals c.stId where c.courseName == "history" 要求。

     

    stIDstuName
    1jack
    2taylor
    3fleming

     

     

     

     

     stID courseName
     1 art
     2 art
     1 history
     3 history
     3 physics

     

    即先将(1,jack)和(1,art),(2,art)...(3,physics)分别匹配,然后再(2,taylor)和(1,art),(2,art)...(3,physics),直到所有都匹配完,最终可以找到两条可以匹配的结果

    2.3 let子句

    let子句接受一个表达式的运算并且把它赋值给一个需要在其他运算中使用的标识符,它是from...let...where片段中的一部分

    1

    2

    3

    4

    5

    var query = from a in groupA

       from b in groupB

       let sum = a + b

       where sum < 12

       select new(a,b,sum);

    2.4 where子句

    where子句根据之后的运算来除去不符合要求的项,一个查询表达式可以有任意多个where子句,一个项必须满足所有的where条件才能避免被过滤,其语法为

    1

    2

    where BoolenExpression1

    where BoolenExpression2

    前面的例子已经多次用过where,这里就不举例了

    2.5 orderby子句

    orderby可以很方便的将返回的数据进行排序,可选ascending和descending两种方式,默认的是ascending

    语法: orderby Expression ascending or descending 二选一

    为join子句中的例子增加一个orderby子句,返回结果就变成了 fleming jack

    1

    2

    3

    4

    5

    var query = from s in students

          join c in courses on s.stId equals c.stId

          where c.courseName == "history"

                   orderby s.stuName  //排序

          select s.stuName;

    2.6 group子句

    group子句可以让你把select的结果按指定的键(key)进行分组 ,每一个分组由一个叫做键的字段区分,分组本身是可枚举类型的并且可以枚举它的项

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    var query = from student in students

       group student by student.major;

     

       foreach (var s in query)

       {

        Console.WriteLine("{0}", s.key);

        foreach (var t in s)

        {

         console.writeLine(" {0}", t.Name);

        }

       }

    2.7 select子句

    select子句指定所选定的对象哪部分应该被选择。可以指定下面的任意一项

    a: 整个数据项

    b: 数据项的一个字段

    c: 数据项中几个字段组成的新对象(或类似其他值)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    var query = from s in students

          select s; //整个数据项

     

       var query = from s in students

          select s.stuName; //s中的一个字段

     

       var query = from a in groupA

          from b in groupB

          let sum = a + b

          where sum < 12

          select new (a, b, sum);  //a,b,sum组成的新字段

    2.8 查询延续: into子句

    查询延续子句可以接受查询的一部分结构并赋予一个名字,从而可以在查询的另一部分中使用

    1

    2

    3

    4

    5

    var someInt = from a in groupA

        from b in groupB

        into groupAandB

        from c in groupAandB

        select c;

    三、方法语法和查询语法

    在使用LINQ写查询时可以使用两种形式的语法:查询语法和方法语法

      a:方法语法(method syntax) : 使用标准的方法调用,这些方法是一组叫做标准查询运算符的方法

      b:查询语法(query method) : 看上去和SQL语句很相似,使用查询表达式形式书写。微软推荐使用查询语法,因为它更易读

    在编译时,CLR会将查询语法转换为方法语法

    1

    2

    3

    4

    5

    6

    7

    int[] num = { 2, 4, 6, 8, 10 };

     

     var numQuery = from number in num //查询语法

        where number < 8

        select number;

     

     var numMethod = num.Where(x => x < 8); //方法语法

    它们得到的结果是一样的。方法语法中where的参数使用了Lambda表达式

    展开全文
  • c# linq语法

    2019-11-11 16:57:33
    namespace linq { class Program { static void Main(string[] args) { //linQ语法 //int[] a = new int[] { 12, 5, 9, 7, 8 }; //var xx = from i in a ...
    namespace linq
    {
        class Program
        {
            static void Main(string[] args)
            {
               //linQ语法
                //int[] a = new int[] { 12, 5, 9, 7, 8 };
                //var xx = from i in a
                //         where 1 % 2 == 0
                //         select i;//linq语法
    
                //var yy = a//方法
                //    .Where(p => p % 2 == 0)
                //    .OrderByDescending(p => p)//排序
                //    .Select(p => p * 2 +1);
                      //赋值
                Person[] persons = new Person[]
                      {
                    new Person{ CityID = 1, Name = "ABC" },
                    new Person{ CityID = 1, Name = "EFG" },
                    new Person{ CityID = 2, Name = "HIJ" },
                    new Person{ CityID = 3, Name = "KLM" },
                    new Person{ CityID = 3, Name = "NOP" },
                    new Person{ CityID = 4, Name = "QRS" },
                    new Person{ CityID = 5, Name = "TUV" }
                      };
                      //赋值
                City[] cities = new City[]
                {
                    new City{ ID = 1,Name = "Guangzhou" },
                    new City{ ID = 2,Name = "Shenzhen" },
                    new City{ ID = 3,Name = "Beijing" },
                    new City{ ID = 4,Name = "Shanghai" }
                };
                //两表连接 linQ语法
                var ss = (from p in persons
                         join c in cities on p.CityID equals c.ID
                         select new
                         {
                             PersonName = p.Name,
                             CityName = c.Name
                         }).ToList();
    
                foreach (var item in ss)
                {
                    Console.WriteLine(item.PersonName + "+" + item.CityName);
                    
                }
                Console.Read();
            }
        }
        //人表
        class Person
        {
            public int CityID { set; get; }
            public string Name { set; get; }
        }
        //城市表
        class City
        {
            public int ID { set; get; }
            public string Name { set; get; }
        }
    
    
    
       
    
         
    }
    
    展开全文
  • C# LINQ语法详解

    2019-09-30 21:22:44
    1.简单的linq语法 //1 var ss = from r in db.Am_recProScheme select r; //2 var ss1 = db.Am_recProScheme; //3 string sssql = "select * from Am_recProScheme"; 2.带where的查询 //1 var ...

    1.简单的linq语法

    //1
    var ss = from r in db.Am_recProScheme
             select r;
    //2
    var ss1 = db.Am_recProScheme;
    //3
    string sssql = "select * from Am_recProScheme";

    2.带where的查询

    //1
    var ss = from r in db.Am_recProScheme
             where r.rpId > 10
             select r;
    //2
    var ss1 = db.Am_recProScheme.Where(p => p.rpId > 10);
    //3
    string sssql = "select * from Am_recProScheme where rpid>10";

    3.简单的函数计算(count,min,max,sum)

    //1
    ////获取最大的rpId
    //var ss = (from r in db.Am_recProScheme
    //          select r).Max(p => p.rpId);
    ////获取最小的rpId
    //var ss = (from r in db.Am_recProScheme
    //          select r).Min(p => p.rpId);
    //获取结果集的总数
    //var ss = (from r in db.Am_recProScheme                  
    //         select r).Count();
    //获取rpId的和
    var ss = (from r in db.Am_recProScheme
              select r).Sum(p => p.rpId);
    
    
    //2
    //var ss1 = db.Am_recProScheme.Max(p=>p.rpId);
    //var ss1 = db.Am_recProScheme.Min(p => p.rpId);
    //var ss1 = db.Am_recProScheme.Count() ;
    var ss1 = db.Am_recProScheme.Sum(p => p.rpId);
    Response.Write(ss);
    
    //3
    string sssql = "select max(rpId) from Am_recProScheme";
           sssql = "select min(rpId) from Am_recProScheme";
           sssql = "select count(1) from Am_recProScheme";
           sssql = "select sum(rpId) from Am_recProScheme";

    4.排序order by desc/asc

    var ss = from r in db.Am_recProScheme
             where r.rpId > 10
             orderby r.rpId descending  //倒序
             //  orderby r.rpId ascending   //正序
             select r;
    //正序
    var ss1 = db.Am_recProScheme.OrderBy(p => p.rpId).Where(p => p.rpId > 10).ToList();
    //倒序
    var ss2 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).ToList();
    string sssql = "select * from Am_recProScheme where rpid>10 order by rpId [desc|asc]";

    5.top(1)

    //如果取最后一个可以按倒叙排列再取值
    var ss = (from r in db.Am_recProScheme
              select r).FirstOrDefault();
    //()linq to ef 好像不支持 Last() 
    var ss1 = db.Am_recProScheme.FirstOrDefault();
    //var ss1 = db.Am_recProScheme.First();          
    string sssql = "select top(1) * from Am_recProScheme";

    6.跳过前面多少条数据取余下的数据

    //1
    var ss = (from r in db.Am_recProScheme
              orderby r.rpId descending
              select r).Skip(10); //跳过前10条数据,取10条之后的所有数据   
    //2  
    var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Skip(10).ToList();
    //3
    string sssql = "select * from  (select ROW_NUMBER()over(order by rpId desc) as rowNum, * from [Am_recProScheme]) as t where rowNum>10";

    7.分页数据查询

    //1
    var ss = (from r in db.Am_recProScheme
              where r.rpId > 10
              orderby r.rpId descending
              select r).Skip(10).Take(10); //取第11条到第20条数据
    //2 Take(10): 数据从开始获取,获取指定数量(10)的连续数据
    var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).Skip(10).Take(10).ToList();
    //3
    string sssql = "select * from  (select ROW_NUMBER()over(order by rpId desc) as rowNum, * from [Am_recProScheme]) as t where rowNum>10 and rowNum<=20";

    8.包含,类似like '%%'

    //1
    var ss = from r in db.Am_recProScheme
             where r.SortsText.Contains("")
             select r;
    //2
    var ss1 = db.Am_recProScheme.Where(p => p.SortsText.Contains("")).ToList();
    //3
    string sssql = "select * from Am_recProScheme where SortsText like '%张%'";

    9.分组group by

    //1
    var ss = from r in db.Am_recProScheme
             orderby r.rpId descending
             group r by r.recType into n
             select new
             {
                 n.Key,  //这个Key是recType
                 rpId = n.Sum(r => r.rpId), //组内rpId之和
                 MaxRpId = n.Max(r => r.rpId),//组内最大rpId
                 MinRpId = n.Min(r => r.rpId), //组内最小rpId
             };
    foreach (var t in ss)
    {
        Response.Write(t.Key + "--" + t.rpId + "--" + t.MaxRpId + "--" + t.MinRpId);
    }
    //2
    var ss1 = from r in db.Am_recProScheme
             orderby r.rpId descending
             group r by r.recType into n
             select n;
    foreach (var t in ss1)
    {
        Response.Write(t.Key + "--" + t.Min(p => p.rpId));
    }
    //3
    var ss2 = db.Am_recProScheme.GroupBy(p => p.recType);
    foreach (var t in ss2)
    {
        Response.Write(t.Key + "--" + t.Min(p => p.rpId));
    }
    //4
    string sssql = "select recType,min(rpId),max(rpId),sum(rpId) from Am_recProScheme group by recType";

    10.sql中的In

    //Linq
    var ss = from p in db.Am_recProScheme
                      where (new int?[] { 24, 25,26 }).Contains(p.rpId)
                      select p;
    foreach (var p in ss)
    {
        Response.Write(p.Sorts);
    }
    //SQL
    string st = "select * from Am_recProScheme where rpId in(24,25,26)";

    11.内连接 INNER JOIN

    //Linq
    var ss = from r in db.Am_recProScheme
             join w in db.Am_Test_Result on r.rpId equals w.rsId
             orderby r.rpId descending
             select r;
    //Lambda
    var ss1 = db.Am_recProScheme.Join(db.Am_Test_Result, p => p.rpId, r => r.rsId, (p, r) => p).OrderByDescending(p => p.rpId).ToList();
    //SQL
    string sssql = "select r.* from  [Am_recProScheme] as r inner join [dbo].[Am_Test_Result] as t on r.[rpId] = t.[rsId] order by r.[rpId] desc";

    12.左连接 LEFT JOIN

    //两个DataTable关联,查找只在第一个表中的数据
    static void Main(string[] args)
    {
        DataTable dt1 = new DataTable("Ta");
        DataTable dt2 = new DataTable("Tb");
        dt1.Columns.Add("ID", typeof(int));
        dt1.Columns.Add("Name", typeof(string));
        dt1.Rows.Add(1, "小明");
        dt1.Rows.Add(2, "小红");
        dt1.Rows.Add(3, "小黑");
        dt2.Columns.Add("ID", typeof(int));
        dt2.Columns.Add("Name", typeof(string));
        dt2.Rows.Add(1, "小黄");
        dt2.Rows.Add(2, "小红");
        dt2.Rows.Add(3, "小强");
        //方法一:Linq
        //var query = from q1 in dt1.AsEnumerable()
        //            join q2 in dt2.AsEnumerable()
        //            on q1.Field<string>("Name") equals q2.Field<string>("Name") into tmp
        //            from q3 in tmp.DefaultIfEmpty()
        //            where q3 == null
        //            select new
        //            {
        //                ID = q1.Field<int>("ID"),
        //                Name = q1.Field<string>("Name")
        //            };
        //方法二:Lambda
        var query = dt1.AsEnumerable().GroupJoin(
            dt2.AsEnumerable(),
            x => x.Field<string>("Name"),
            y => y.Field<string>("Name"),
            (x, y) => y.DefaultIfEmpty(). Where(w => w == null).
            Select(z => new { ID = x.Field<int>("ID"), Name = x.Field<string>("Name") })
            ).SelectMany(x => x);
        foreach (var item in query)
        {
            Console.WriteLine($"ID={item.ID}    Name={item.Name}");
        }
        Console.Read();
    }

    实例用法:

    //数据库 + 自定义名称 =new 数据库
    mydbDataContext con = new mydbDataContext();
    //模糊查询表达式中用.Contains
    con.car.Where(r=>r.name.Contains(TextBox1.Text.Trim())).ToList();
    //开头查用.StartWith
    con.car.Where(r => r.name.StartsWith(TextBox1.Text)).ToList();
    //结尾查用.EndWith
    con.car.Where(r => r.name.EndsWith(TextBox1.Text)).ToList();
    //最大值
    con.car.Max(r => r.price * r.oil).ToString();
    //最小值
    con.car.Min(r => r.price).ToString();
    //求和
    con.car.Sum(r => r.price).ToString();
    //平均值
    con.car.Average(r => r.price).ToString();
    //升序:
    con.car.OrderBy(r => r.price).ToList();
    //降序:
    con.car.OrderByDescending(r => r.price).ToList();
    
    //上一页,下一页,组合查询:
    int PageCount = 5;//每页显示条数
    //上一页,PageCount_Label.Text为当前页码
    int pageNum = Convert.ToInt32(PageCount_Label.Text) - 1;
    Repeater1.DataSource = con.car.Skip((pageNum - 1) * PageCount).Take(PageCount);
    Repeater1.DataBind(); 
    PageCount_Label.Text = pageNum.ToString();
    //下一页
    int pageNum = Convert.ToInt32(PageCount_Label.Text) + 1;
    Repeater1.DataSource = con.car.Skip((pageNum - 1) * PageCount).Take(PageCount);
    Repeater1.DataBind();
    PageCount_Label.Text = pageNum.ToString();
    //组合查询的点击事件
    List<car> list = con.car.ToList();
    if (TextBox2.Text != "")
    {
        List<car> list1 = con.car.Where(r => r.name.Contains(TextBox2.Text)).ToList();
        list = list.Intersect(list1).ToList();
    }
    if (TextBox3.Text != "")
    {
        List<car> list1 = con.car.Where(r => r.oil == Convert.ToDecimal(TextBox3.Text)).ToList();
        list = list.Intersect(list1).ToList();
    }
    if (TextBox4.Text != "")
    {
        List<car> list1 = con.car.Where(r => r.powers == Convert.ToInt32(TextBox4.Text)).ToList();
        list = list.Intersect(list1).ToList();
    }
    Repeater1.DataSource = list;
    Repeater1.DataBind();

     

    转载于:https://www.cnblogs.com/sxjljj/p/11348652.html

    展开全文
  • Linq 语法

    2019-06-05 19:08:25
    Linq 是语言集成查询(Language-Integrated Query)的简称,是一系列直接将查询功能集成到 C# 语言的技术统称。Linq 提供了统一种跨数据源和数据格式使用数据的一致模型,并且 Linq 查询支持编译时类型检查和智能...
  • linq语法基础使用示例

    2020-09-04 18:42:48
    LINQ语言集成查询(Language Integrated Query),是在.NET Framework 3.5 中出现的技术,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据,下面学习一下他的使用方法
  • 天轰穿老师VS2010趣味编程视频教程,第35讲,LINQ语法(二),FLV格式,压缩包自带10%恢复记录
  • Linq语法详细

    2017-07-13 09:17:07
    1.简单的linq语法 //1 var ss = from r in db.Am_recProScheme select r; //2 var ss1 = db.Am_recProScheme; //3 string sssql
  • sql语句-linq语言-lambda表达式对照。 可以帮助对SQL、linq、lambda表达式存在疑惑不明白的在这里面可以充分提现出
  • Linq 语法 总结

    2013-06-17 10:27:29
    Linq 语法 总结
  • 1.简单的linq语法 // 1 var ss = from r in db.Am_recProScheme select r; // 2 var ss1 = db.Am_recProScheme; // 3 string sssql = " select * from Am_recProScheme " ; ...
  • LINQ语法

    2018-05-14 13:16:11
    int[] values = { 0, 1, 2, 3, 4, 5, 6 }; var value = from v in values where v&gt;2 &amp;&amp; v&lt;5 select v; foreach (var v in value) { Console.WriteLi...
  • LINQ语法进阶

    千次阅读 2021-10-24 22:57:48
    上篇文章我们说过,LINQ语法中,包含了查询表达式语法和标准查询方法语法,下面我们举例来说明, 如何分别用上述两种不同方式编写常用查询语句。 下表列出包含等效查询表达式子句的标准查询运算符。 方法 C# ...
  • Linq语法

    2017-05-24 14:51:58
    LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
  • EntityFramework数据持久化 Linq语法应用

    千次阅读 2020-05-19 19:21:50
    Linq基础语法 LINQ概述 LINQ(Language Integrated Query,语言集成查询)提供了一种跨数据源和数据格式查询的统一模型。 LINQ的组成: LINQ To Objects:查询集合对象 LINQ enabled ADO.NET:查询数据库  LINQ ...
  • C# linq语法

    2022-09-09 23:07:41
    博客链接:https://www.ccrui.cn/archives/c-linq-yu-fa.html。
  • 通过有趣,强大的功能扩展了内置的python列表-.NET的Language Integrated Queries(Linq)等。 使用强大的语法编写简洁的代码。 pip install linqit 停止使用循环,复杂条件,列表理解和过滤器。 看起来不是更好...
  • asp.net mvc linq语法示例

    2017-03-23 11:24:06
    linq语法示例
  • linq语法基础使用示例借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。从技术角度而言,LINQ定义了大约40个查询操作符,如from, select, in, where, group by, orderby, … 使用这些操作符可以...
  • C#基础之LINQ语法解析

    2016-10-25 17:48:26
    LINQ是一种类似于SQL语句的语法,用法也大致相同,这里使用LINQ可以做很多事情,数据库、对象、XML、JSON等都可以使用。 1.用法如下 1> from...in... 指定要查找的数据源以及范围变量 List names = new List() {...
  • Linq基础语法

    2019-11-19 09:44:34
    Linq语法详细闲言碎语近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些linq新手,如果有其它疑问,可以进右上角群,进行交流探讨,谢谢。开门见山读这篇文章之前,我先说下,每一种...
  • 继续学习linq语法

    2019-12-06 13:26:55
    /******************************************... 功能:继续学习linq语法 *****************************************************/ using System.Collections.Generic; using System.Data; using System.Linq; us...
  • 弹性LINQ ElasticLINQ是免费的C#库,用于在.NET 4.5 / PCL中使用LINQ语法搜索Elasticsearch,例如var db = new ElasticContext ( new ElasticConnection ( new Uri ( " http://myserver:9200 " )));var p = db . ...
  • C#LinQ语法

    2018-06-20 23:44:57
    Unity开发VR之Vuforia 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) ...助力快速完成服务器的购买、配置、以及网站...
  • 谈谈对Linq语法的看法

    2021-06-08 08:14:19
    Linq中,where查询与SQL命令中的Where作用相似,都是起到范围限定,也就是起过滤作用,而判断条件就是后面所接的子句. Where操作包括3种形式 1.简单形式:例:使用where筛选在北京的客户 var q = from c in db.China ...
  • LINQ语法基础

    2014-05-15 21:17:48
    LINQ语法基础,文档,语法精确,容易学习
  • 1.Linq的Select 语法 public class Provide { public int Id { get; set; } public string Name { get; set; }//名字 private string phone{get; set }; //手机 } List&amp;lt;Provide&amp;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,593
精华内容 9,837
关键字:

linq语法

友情链接: net-sysfs.rar