linq基本操作

8242 ワード

一、Linqには2つの文法があります.
1、方法文法
2、クエリー構文
この2つの方法の違いを例に挙げてみましょう
例えば今学生のクラスがあります
public class student

{

    public string username { get; set; }

    public int age { get; set; }

    public string sex { get; set; }

}

 
私たちは一つの方法で多くの学生を追加します.
public IList<student> GetStu(int n)

    {

        IList<student> stuList = new List<student>();

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

        {

            student stu = new student();

            stu.age = 25 + i;

            stu.sex = " " + i;

            stu.username = " " + i;

            stuList.Add(stu);

        }

        return stuList;

}

 
この方法はリスト集合を返します.次にlinqでこの集合を操作できます.
まず、すべての学生を調べてみましょう.
A、照会文法:
   var list = GetStu(10);

    var result = from s in list

             select new { stuname=s.username,sex=s.sex,age=s.age};

 
これはlinqでよく使われる構文from変数inの集合です
Select変数
B、方法文法
  
var result1 = list.Select(s1 => new { username = s1.username, age = s1.age, sex = s1.sex });

 
これがメソッド構文で、一般的なC#構文に合致します
 
この2つの方法の実行結果は同じで、唯一の違いは文法です.
 
二、出力の方式
出力の仕方も2種類あり、linqは主に集合を操作することを知っているので、一般的には循環出力が必要です.
第1の出力方式:
        string stt = null;

        foreach (var sa in result3)

        {

            stt += sa.username;

        }

        Response.Write(stt);

 
これは私たちがよく使うforeachサイクルです
 
第2の出力方式:
  result.ToList().ForEach(s => { Response.Write(s.stuname+s.sex+s.age); });

 
この方法は簡単で、直接ForEachメソッドを呼び出して、メソッドの体内は1つのlimba式です
さらにToList()メソッドの役割を説明すると、linqではfrom...selectの場合、返された結果は実行されず、ループ呼び出しの場合に実行されます.これは遅延実行であり、すぐに実行するためにToList()を使用する必要がある場合があります.
 
三、linqでよく使われるいくつかのクエリーについて簡単に説明します.
1、条件選択クエリー(where)
例えば26歳以上の学生を調べるには
var result = from s in list

                     where s.age>26     // 

                 select s.username;

 
あるいはこう書く
  var result2 = list.Where(s => s.age > 25);   //   

 
2、クエリーのソート
例えば、学生の年齢の逆順に並べて検索します.
var result = from s in list

                     orderby s.age descending    // 

                     where s.age>26     // 

                  select s.username;

 
あるいはこう書く
var result3 = list.OrderByDescending(s1 =>s1.age);

 
3、データクエリーのページング表示
SkipとTakeメソッドを使用しました
Skipの役割は指定された数の要素をスキップします
Takeの役割は、指定された位置の連続数を返す要素です.
      var list1 = GetList(50);

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

        {

            Response.Write(" " + (i + 1) + " ");

            var result = from s in list.Skip(i * 10).Take(10)

                         select s;

            result.ToList().ForEach(s => { Response.Write(s); });

    }

 
これが5ページに分けて、1ページに10個のページング方式を表示します
 
4|、単一要素を返す
First()、FirstOrDefault()、single、singleOrDefault()
First():最初の要素を返し、ない場合は例外を放出します.
FirstOrDefault():最初の要素を返し、ない場合は空を返します.一般的にnullが返されます.
Single:エレメント内の唯一のエレメントを返します.1つ未満の場合は例外を放出します.
singleOrDefault:エレメント内の一意のエレメントを返し、1つ未満の場合は空を返します.通常nullです.
     var result1 = from r in list1

                      select r;

        var rt = result1.First();

result1.Single()