LINq 语法基础

创建隐形局部变量查询数组并输出

string[] w = { "a", "b", "c" };
var word = from words in w select new { Upper = words.ToUpper(), Lower = words.ToLower() };
foreach (var item in word)
{
Response.Write(string.Format("大写:{0} --- 小写:{1}", item.Upper, item.Lower));
Response.Write("</br>");

}

输出结果:

QQ20120130092816_thumb2

隐式类型变量使用的规则

1.声明隐式类型变量同时必须初始化,不能初始化为null.

2.由var声明的变量不能用在初始化表达式中,比如 var v=v++;这样会产生编译错误.

3.不能再同一个语句中初始化多个隐式类型的变量.

Lambda表达式的使用

string[] w = { "a1", "ab", "c" };
//使用lambda表达式查出含有a的数组项
string[] containsa = Array.FindAll(w, s => (s.IndexOf("a") >= 0)); //s是输入参数,=>右边的是表达式
foreach (var item in containsa)
{
Response.Write(item + "</br>");

}

LINQ查询表达式

where子句

string[] w = { "a1", "ab", "c" };
IEnumerable<string> selectQuery = from a in w where a.Length > 1 select a;
foreach (var item in selectQuery)
{
Response.Write(item + "</br>");

}

 

Group 子句

public class people
    {
        public string name { get; set; }
        public int age { get; set; }
    }

people[] p = {
                        new people { name = "p", age = 1 },
                        new people { name = "pp", age = 2 },
                        new people { name = "ppp", age = 2 }
                    };

var ss = from a in p
               group a by a.age;


    

foreach (var item in ss) //item相当于其中一个组
   {
          Response.Write(string.Format("age={0}", item.Key) + "</br>");

          foreach (var items in item)  //遍历组中的每个成员的属性
      {
              Response.Write(items.name + "</br>");

          }

      }

输出结果:image

总结: 查询的结果是 由关键字标识 的组的枚举,并且由内部项 组成. 实际上,在查询的返回结果中枚举了每一组,并向页面写入了每一组

的Key属性,并浏览了每一组中得项,然后在提取这些项的值.

orderby 子句

//应用 上面的对象集合

var asd = from z in p
                orderby z.age descending// ascending升序
                select new { z.age, z.name };
      foreach (var item in asd)
      {
          Response.Write(item + "</br>");

      }

输出结果:image

join子句

提醒 : join左键 使用外部源序列,右键使用内部源序列.

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

1.下面的 查询 完成学生和年级之间的内部链接

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

public class student
  {
      public string name { get; set; }
      public int age { get; set; }
      public int Igrades { get; set; }
  }
  public class grade
  {
      public int grades { get; set; }
      public string name { get; set; }
  }

student[] s = {
                        new student { name = "a", age = 11, Igrades = 1 },
                        new student { name = "b", age = 13, Igrades = 1 },
                        new student { name = "c", age = 12, Igrades = 2 }
                   
                    };
      grade[] g = {
                      new grade { grades = 1, name = "1年级" },
                      new grade { grades = 2, name = "2年级" } ,

                       new grade { grades = 3, name = "3年级" }

                      
                  };

 

      var stu = from gg in g
                join students in s on gg.grades equals students.Igrades
                select new
                {

                    gg.grades,
                    GradeName = gg.name,
                    students.name

                };

      foreach (var item in stu)
      {
          Response.Write(item + "</br>");

      }

结果:image

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

2.分组链接

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

分组链接定义了 一个 产生分层返回结果集的联接,它把内部序列内容和对应的外部序列内容 分组.

在外部序列内容缺少对应的内部序列内容的 情况下,该外部序列内容将与空数组联接.

var sss = from gg in g
          join s in stu on gg.grades equals s.Igrades
          into asd
          select new
          {

              gg.grades,
              GradeName = gg.name,
              students = asd

          };

foreach (var item in sss)
{
    Response.Write(string.Format("{0}-{1}", item.grades, item.GradeName) + "</br>");

    foreach (var items in item.students)
    {
        Response.Write(items.name + "</br>");

    }

}

 

结果:image

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

3.左外联接

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

返回一个平面结果集,包括所有外部源 的内容,可以再查询表达式中 定义分组链接

var sss = from gg in g
                 join stus in stu on gg.grades equals stus.Igrades
                    into asd
                 from aa in asd.DefaultIfEmpty(
                 new student
                 {
                     name = "null",
                     Igrades = 0,
                     age = 0
                 }

                 )
                 select new
                 {
                     gg.grades,
                     GradeName = gg.name,
                     Students = aa.name


                 };
       foreach (var item in sss)
       {
           Response.Write(item + "</br>");

       }

效果:image

 

let子句


       var sss = from gg in g
                 join stus in stu on gg.grades equals stus.Igrades
                 into asd
                 let count = asd.Count()
                 orderby count
                 select new { gg.grades, count };

       foreach (var item in sss)
       {
           Response.Write(item + "</br>");

       }

效果:image

 

 

 

 

 

 

posted @ 2012-01-30 16:28  高捍得  阅读(279)  评论(0编辑  收藏  举报