step5-LINQ

LINQ

.lINQ使用

1.lINQ简介

(1)概念:语言集成查询 (LINQ)它在对象领域和数据领域之间架起了一座桥梁。

(2)使用场景:SQL Server 数据库、XML文档、ADO.NET数据集,以及支持IEnumerable或泛型IEnumerable<T>接口的任意对象集合。

(3)LINQ操作三部分

LINQ查询操作都由以下三个不同的操作组成:

1.      获取数据源。

2.      创建查询。

3.      执行查询。

Eg:

class IntroToLINQ

  {        

      static void Main()

      {

          // 1. 获取数据源

          int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

 

          // 2.创建查询

            // numQuery IEnumerable<int>类型

            var numQuery =

              from num in numbers

              where (num % 2) == 0

              select num;

  

          // 3.执行查询

            foreach (int num in numQuery)

          {

              Console.Write("{0,1} ", num);

         }

     }

 }

2.修改查询

2.1对结果排序

         //查询格式:

         var sortedGroups =

               from student in students

               orderby student.Last, student.First

               group student by student.Last[0] into newGroup

               select newGroup;

 

           // 执行格式:

           Console.WriteLine(Environment.NewLine + "sortedGroups:");

           foreach (var studentGroup in sortedGroups)

           {

               Console.WriteLine(studentGroup.Key);

               foreach (var student in studentGroup)

               {

                   Console.WriteLine("   {0}, {1}", student.Last, student.First);

               }

           }

2.2按键值对组进行排序

当您运行前面的查询时,会注意到组没有按字母顺序排列。若要改变这种情况,您必须在group子句后提供orderby子句。但要使用orderby子句,您首先需要一个标识符,用作对group子句创建的组的引用。可以使用into关键字来提供此标识符。

             var studentQuery4 =

               from student in students

               group student by student.Last[0] into studentGroup

               orderby studentGroup.Key

               select studentGroup;

 

           foreach (var groupOfStudents in studentQuery4)

           {

               Console.WriteLine(groupOfStudents.Key);

               foreach (var student in groupOfStudents)

               {

                   Console.WriteLine("   {0}, {1}",

                       student.Last, student.First);

               }

           }

2.3使用 let引入标识符

您可以使用let关键字为查询表达式中的任何表达式结果引入标识符。此标识符可以提供方便(如下面的示例所示),也可以通过存储表达式的结果来避免多次计算,从而提高性能。

var studentQuery5 =

   from student in students

   let totalScore = student.Scores[0] + student.Scores[1] +

       student.Scores[2] + student.Scores[3]

   where totalScore / 4 < student.Scores[0]

   select student.Last + " " + student.First;

 

foreach (string s in studentQuery5)

{

   Console.WriteLine(s);

}

2.4在查询表达式中使用方法语法

下面的代码计算源序列中每个 Student的总分,然后对该查询的结果调用Average()方法来计算班级的平均分。请注意,查询表达式的两边使用了括号。

 var studentQuery6 =

       from student in students

       let totalScore = student.Scores[0] + student.Scores[1] +

           student.Scores[2] + student.Scores[3]

       select totalScore;

 

 double averageScore = studentQuery6.Average();

Console.WriteLine("Class average score = {0}", averageScore);

2.5select语句中使用匿名类型

   var studentQuery8 =

      from student in students

      let x = student.Scores[0] + student.Scores[1] +

            student.Scores[2] + student.Scores[3]

            where x > averageScore

            select new { id = student.ID, score = x };

 

    foreach (var item in studentQuery8)

    {

       Console.WriteLine("Student ID: {0}, Score: {1}", item.id, item.score);

    }

3.使用LINQ进行数据转换

语言集成查询(LINQ)不仅可用于检索数据,而是还是一个功能强大的数据转换工具。通过使用 LINQ查询,您可以将源序列用作输入,并采用多种方式修改它以创建新输出序列。您可以通过排序和分组来修改序列本身,而不必修改元素本身。 但是,LINQ查询最强大的功能可能在于它能够创建新类型。这一功能在select子句中实现。例如,可以执行下列任务:

(1)将多个输入序列合并到具有新类型的单个输出序列中。

(2)创建其元素只包含源序列中的各个元素的一个或几个属性的输出序列。

(3)创建不同格式的输出序列。例如,您可以将SQL行或文本文件的数据转换为XML

(4)创建其元素包含对源数据执行的操作结果的输出序列。

3.1将多个输入联接到一个输出序列

可以使用LINQ查询来创建包含多个输入序列的元素的输出序列。下面的示例演示如何组合两个内存中的数据结构,但组合来自XML

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值