Linq 小知识

简单的一个小例子

---------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web.UI;
using System.Web;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            List<Student> list = new List<Student>();
            list.Add(new Student(31,"xdaoming","man",14));
            list.Add(new Student(31, "xdaoming", "women", 33));
            list.Add(new Student(31, "xdaoming", "man", 22));
            list.Add(new Student(1,"xaaob","women",18));
            list.Add(new Student(23,"xcaoh","man",11));
            list.Add(new Student(23,"das","man",11));

            var dd = from stu in list
                     where stu.Name.StartsWith("x") //筛选出姓名从x开始的学员
                     orderby stu.Name.Substring(1,1) descending,stu.Age descending//复合排序
                     select stu;
            foreach (Student s in dd)
            {
                Console.WriteLine(string.Format("{0} {1} {2} {3}",s.ID,s.Name,s.Sex,s.Age));
            }
            Console.ReadLine();
        }
    }

    public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        public int Age { get; set; }

        public Student(int id, string name, string sex, int age)
        {
            this.ID = id;
            this.Name = name;
            this.Sex = sex;
            this.Age = age;
        }
    }

  
}

注意引用System.Linq

-----------------------------

过滤重复值

x..Distinct();

---------------------------

实现分组
分组查询和SQL语句中的带有“group”关键字的查询功能类似,它能够把查询结果按照关键字进行分组。

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
            var group = from num in numbers
                        group num by num % 5 into g
                        select new { Remainder = g.Key, Numbers = g };
            foreach (var item in group)
            {
                Console.WriteLine(string.Format("remain:", item.Remainder, item.Numbers));
                foreach (var i in item.Numbers)
                {
                    Console.WriteLine("number:" + i.ToString());
                }
            }

---------------------------

---------------------------

实现聚集查询

LINQ不仅能够实现复杂的查询,也可以实现和SQL相同的聚集和联合查询,包括获取最大值、最小值、平均值和计数等。
1。实现计数
使用Count()方法返回集合项的数目,使用方法示例代码如下:
var num = (from s in names select s.ToLower()).Count();
2。求最大值和最小值
返回最大值、最小值的方法和计数方法基本相同,也有两种表达方式,混合模式示例代码如下:
int maxLength = (from s in names select s.Length).Max();//混合模式求最大值
int minLength = (from s in names select s.Length).Min();//混合模式求最小值
3。求平均值
使用Average()方法返回集合的平均值,也有两种表达方式,混合模式和纯粹查询模式。
4。返回集合的总和
使用Sum()方法可以获取集合的总和,也有两种表达方式,混合模式和纯粹查询模式。

---------------------------

【本节示例参考:\源代码\C14\ Example_LINQSkip】
在编程中我们常常需要跳过某一段项目获取另一段的值,如分页就需要这样处理,没有LINQ前,实现分页比较麻烦,现在LINQ提供了分区类查询方法,实现分页就易如反掌,下面看看它的强大功能吧。
分区类查询使用Take,、Skip、TakeWhile、SkipWhile来共同实现,其中,
Take:提取指定数量的项;
Skip:跳过指定数量的项并获取剩余的项;
TakeWhile:根据指定条件提取项;
SkipWhile:根据指定条件跳过项。
下面使用一个简单的例子演示Take/Skip的用法。
01 int[] numbers = new int[] { 1,2,3,4,5,6,7,8,9,10};
02 //分区类查询
03 var num5 = numbers.Skip(1).Take(2);
04 foreach (var item in num5)
05 {
06       Console.WriteLine("分区类查询结果={0}",item);
07 }
----------------------------------------------------------------------------------------

LINQ 关联表

var output = (from sub in context.Tbl_SubCompany
                              join dept in context.Tbl_Department
                              on sub.SubCompanyId equals dept.SubCompanyID
                              where sub.Ins_no == InsNo
                              select new
                              {
                                dept.DepartmentID,
                                dept.DepartmentName
                              }).ToList().SerializeObject();

---------------------------------------------------

参考地址

http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

原文地址:https://www.cnblogs.com/luxx/p/1951393.html