Linq起源

简介: 书籍,书籍集合,从书籍集合中查找符合条件的书籍  (一)书籍 public class Book{   public int Unid { get; set; }   public string Name { get; set; }   public int Price { get; se...

书籍,书籍集合,从书籍集合中查找符合条件的书籍 

(一)书籍

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 > ;

    
foreach  (Book book  in  _newList)
        Console.WriteLine(book.Name);
}

 

(八)自定义判断方法

[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   true ;
   
return   false ;
}

 

(九)使用匿名方法来替换

[Test(Description  =   " 匿名方法 " )]
public   void  TestOrigin4()
{
    IList
< Book >  _newList  =  BookHelper.SearchBook2(_list, 
               
delegate (Book book) {  return  book.Price  <   100 ; });
    
foreach  (Book book  in  _newList)
        Console.WriteLine(book.Name);
}

 

(十)匿名方法符号化

[Test(Description  =   " 匿名方法的符号化 " )]
public   void  TestOrigin5()
{
    IList
< Book >  _newList  =  BookHelper.SearchBook2(_list,book  =>  book.Price  < 100 );
    
foreach  (Book book  in  _newList)
       Console.WriteLine(book.Name);
}

 

(十一)

[Test(Description  =   " IList的静态方法Where,并采用goes to " )]
public   void  TestOrigin6()
{
    IList
< Book >  _newList  =  _list.Where(book  =>  book.Price  <   100 ).ToArray < Book > ();

    
foreach  (Book book  in  _newList)
        Console.WriteLine(book.Name);
}

 

不管是IList还是IList都可以使用这个Where方法了但是做集合操作的时候我们不仅仅需要Where,还需要OrderByGroup等等,我想把所有的SQL能干的都移植过来。当然微软也意识到了这点,如是在.net 3.5里,微软发布了我们梦寐以求的Linq,将查询集成到语言里面来。它给IEnumerable添加了很多扩展方法,这样你可以很自然的去调用。你可以使用Reflector打开System.Core.dll,打开System.Linq命名空间,在这个命名空间里有一个Enumerable类,这里面就是微软为我们添加的扩展方法,看看,是不是SQL里所有的东西都可以在这里找到了

更多内容请见:http://kb.cnblogs.com/zt/linq/

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
4月前
|
XML 开发框架 .NET
C# | Linq基本功 —— 必学的必熟的10个方法
Linq(Language Integrated Query)是C#语言中的一种查询语言,它提供了一种统一的方式来查询和操作各种数据源,如集合、数据库、XML等。Linq的出现使得开发者能够以一种更简洁、更直观的方式来处理数据,提高了代码的可读性和可维护性。
80 0
|
.NET 开发框架 数据格式