天天看點

Linq起源

書籍,書籍集合,從書籍集合中查找符合條件的書籍 

(一)書籍

public class Book

{

   public int Unid { get; set; }

   public string Name { get; set; }

   public int Price { get; set; }

   public string Publisher { get; set; }

}

(二)書籍集合

public static class BookHelper

    public static IList<Book> SearchBook(IList<Book> list)

    {

        IList<Book> _list = new List<Book>(); 

        foreach (Book book in list)

        {

           if (book.Price < 100)

              _list.Add(book);

        }

        return _list;

    }

從書籍集合中查找價格在100以下的書籍。這裡采用了擴充方法。是以可以以

BookHelper.SearchBook的方式來調用方法

(三)測試

(1)準備

IList<Book> _list = new List<Book>();

[SetUp]

public void Init()

   _list.Add(new Book { Price = 20, Name = "book1" });

   _list.Add(new Book { Price = 320, Name = "book6" });

   _list.Add(new Book { Price = 200, Name = "book2" });

   _list.Add(new Book { Price = 80, Name = "book3" });

   _list.Add(new Book { Price = 870, Name = "book4" });

   _list.Add(new Book { Price = 250, Name = "book5" });

(2)測試

[Test(Description="原始方法")]

public void TestOrigin()

    List<Book> _newList = BookHelper.SearchBook(_list) as List<Book>;

   foreach (Book book in _newList)

      Console.WriteLine(book.Name);

(四)現在把價格判斷分離到獨立的方法

public static IList<Book> SearchBook1(IList<Book> list)

   IList<Book> _list = new List<Book>();

   foreach (Book book in list)

   {

      if (CheckCondition(book))

                _list.Add(book);

   }

   return _list;

public static bool CheckCondition(Book book)

    if (book.Price < 100)

        return true;

    return false;

 }

(五)測試

[Test(Description = "分離判斷方法")]

public void TestOrigin1()

    List<Book> _newList = BookHelper.SearchBook1(_list) as List<Book>; 

    foreach (Book book in _newList)

        Console.WriteLine(book.Name);

(六)通過委托來傳遞判斷方法

public delegate bool DCheckCondition(Book book);

/// <summary>

/// 傳遞分離的判斷方法

/// </summary>

/// <param name="list"></param>

/// <returns></returns>

public static IList<Book> SearchBook2(IList<Book> list,DCheckCondition check)

    IList<Book> _list = new List<Book>(); 

    foreach (Book book in list)

        if (check(book))

           _list.Add(book);

    return _list;

(七)測試

[Test(Description = "傳遞分離的判斷方法")]

public void TestOrigin2()

    List<Book> _newList = BookHelper.SearchBook2(_list,BookHelper.CheckCondition) as List<Book>;

(八)自定義判斷方法

[Test(Description = "代理傳遞分離的判斷方法")]

public void TestOrigin3()

 {

      List<Book> _newList = BookHelper.SearchBook2(_list, 

      new LOrigin.BookHelper.DCheckCondition(CheckCondition)) as List<Book>;

      foreach (Book book in _newList)

            Console.WriteLine(book.Name);

public bool CheckCondition(Book book)

   if (book.Price < 100)

   return false;

(九)使用匿名方法來替換

[Test(Description = "匿名方法")]

public void TestOrigin4()

    IList<Book> _newList = BookHelper.SearchBook2(_list, 

               delegate(Book book) { return book.Price < 100; });

(十)匿名方法符号化

[Test(Description = "匿名方法的符号化")]

public void TestOrigin5()

    IList<Book> _newList = BookHelper.SearchBook2(_list,book => book.Price <100);

       Console.WriteLine(book.Name);

(十一)

[Test(Description = "IList的靜态方法Where,并采用goes to")]

public void TestOrigin6()

    IList<Book> _newList = _list.Where(book => book.Price < 100).ToArray<Book>();

不管是IList還是IList都可以使用這個Where方法了但是做集合操作的時候我們不僅僅需要Where,還需要OrderBy,Group等等,我想把所有的SQL能幹的都移植過來。當然微軟也意識到了這點,如是在.net 3.5裡,微軟釋出了我們夢寐以求的Linq,将查詢內建到語言裡面來。它給IEnumerable添加了很多擴充方法,這樣你可以很自然的去調用。你可以使用Reflector打開System.Core.dll,打開System.Linq命名空間,在這個命名空間裡有一個Enumerable類,這裡面就是微軟為我們添加的擴充方法,看看,是不是SQL裡所有的東西都可以在這裡找到了

部落格園大道至簡

<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>

轉載請注明:部落格園

繼續閱讀