新手asp.net(c#)网页编程会用到的基本LINQ语法框架

来源:互联网 发布:地图标记软件 编辑:程序博客网 时间:2024/05/22 00:19


-----————————————————————————————————————————————————————————————

1、where的用法

下面我们使用Linq实现一个对数组的查找功能,代码如下:

示例1

class Program

    {

        static void Main(string[] args)

        {

            string[] names = { "alonso", "zheng", "smith", "jones", "smythe", "small", "Ruiz", "Hsieh", "Jorgenson", "Ilyich", "singh" };

            var result = from n in names where n.StartsWith("s") select n;

            Console.WriteLine("s开头的名字为:");

            foreach (var item in result)

            {

                Console.WriteLine(item);

            }

        }

    }

http://hi.csdn.net/attachment/201110/12/0_13184190426LKQ.gif

var result = from n in names where n.StartsWith("s") select n

解释:1、  用n遍历数组names中的元素,“当(where)”n以s开头时,选择它存入 result这个变量;

           2、用var关键字声明结果变量;var声明的变量不用指定类型,编译器会自动根据结果推断出该类型。这种声明方式只适用于局部变量。

   3、类似StartWith()的方法还有Length()(长度)、Contains()(包含)。

__________________________________________________________________________________________________________________________________________

2、在上面的基础上 我们在引入order by(按一定的排序查询) 的用法:

示例2

static void Main(string[] args)

        {

            string[] names = { "alonso", "zheng", "smith", "jones", "smythe", "small", "Ruiz", "Hsieh", "Jorgenson", "Ilyich", "singh" };

            var result = from n in names where n.StartsWith("s") orderby n select n;

            Console.WriteLine("s开头的名字为:");

            foreach (var item in result)

            {

                Console.WriteLine(item);

            }

        }

Orderby子句默认为升序,但可以添加descending关键字,指定降序排列。如:

Orderby n descending select n;

另外,可以按照任意表达式进行排序,而无需重新编写查询。例如,要按照姓名中的最后一个字母顺序排序,只需添加如下子句:

 Orderby n.Substringn.Length-1;

————————————————————————————————————————————————————————————————

3、

合计运算符

运算符

说明

Count()

结果的个数

Min()

结果中的最小值

Max()

结果中的最大值

Average()

数字结果的平均值

Sum()

所有数字结果的和

使用合计运算符会强制立即执行,而不是延迟执行

示例3

class Program

{

    static void Main(string[] args)

    {

            int[] numbers = CreateNumbers(123456);

            var result = from n in numbers where n > 1000 select n;

            Console.WriteLine("大于1000的个数为:" + result.Count());

            Console.WriteLine("大于1000的最大数为:" + result.Max());

            Console.WriteLine("大于1000的最小数为:" + result.Min());

            Console.WriteLine("大于1000的平均数为:" + result.Average());

            Console.WriteLine("大于1000的数的和为:" + result.Sum(n=>(long)n));

    }

    private static int[] CreateNumbers(int count)

    {

        Random rand = new Random(0);

        int[] result = new int[count];

        for (int i = 0; i < count; i++)

        {

            result[i] = rand.Next();

        }

        return result;

    }

}

示例说明:

Sum()注意,在此给Sum()方法传入了一个λ表达式n=>(long)n,以获得所有数字的和。   n=>(long) n表示将n强制转化成长整型,这个值赋值给n本身。

————————————————————————————————————————————————————————————————

4、

1.6 投射:在查询中创建新对象

投射是在Linq查询中从其它数据类型中创建新数据类型的技术术语。Select关键字是投射运算符。

Sql数据查询语言,select用来从数据表中选择适当的字段,在Linqselect与其类似。例如将示例4中的代码改为如下:

var result=from stu in list where stu.Age=18 select stu.Name;

其运行结果为:

Zhangsan

Lisi

甚至可以通过给select添加表达式,来转换查询中的数据。如:

select n+1;

select stu.Name.ToUpper();

但是与sql不同,Linq不允许在select子句中有多个字段,即select stu.Name,stu.Age这样的形式将产生一个错误。

如果要实现上述情况,需要在select子句中创建一个新对象,来保存查询的结果。

————————————————————————————————————————————————————————————

5、group by

Linq中还可以实现像Sql中的Group by语句一样的分组统计功能。

var result=from stu in list group stu by stu.Class into student select new {Class=student.Key,Count=student.Count()};

var orderresult=from student in result orderby student.Count descending select student;

其运行结果为

在组合查询中的数据通过一个键(key)字段来分组,每个组中的所有程序都共享这个字段值,在此例中键字段是Class

group stu by stu.Class

要计算每个组的数量,应该生成一个新的结果集student

group stu by stu.Class into student

var result=from stu in list group stu by stu.Class into student select new {Class=student.Key,Count=student.Count()};

var orderresult=from student in result orderby student.Count descending select student;

——————————————————————————————————————————————————————————————————————

6、多级排序

1.8 多级排序

处理了带多个属性的对象后,要考虑按多种方式进行排序的问题了,例如我们先按照班级排序,在按照年龄排序。代码如下:

var result=from stu in list orderby stu.Class,stu.Age select stu;

结果如下:

还可以给字段添加Descending关键字。如

orderby stu.Class,stu.Age.deseending;

——————————————————————————————————————————————————————————————————————

 



原创粉丝点击