linq讀書筆記2-查詢記憶體中的對象

來源:互聯網
上載者:User

標籤:get   類   表   name   代碼   c   

上次我們說到了linq對數組內容的檢索,自.net2.0以後,泛型成了很常見的一種應用技術,linq對泛型的檢索也提供了完善的支援

如對list類型的支援,範例如下:

    class Program
    {
        static void Main(string[] args)
        {
            List<Books> samplebooks = new List<Books>() {
                                                   new Books{Id=1,Name="book1"},
                                                   new Books{Id=2,Name="book2"},
                                                   new Books{Id=3,Name="book3"}
                                                };
            var book = samplebooks.Where(p => p.Name.Contains("2"))
                          .Select(p=>p.Name);
            foreach (var item in book)
            {
                Console.WriteLine(item);
            }
                            
            Console.Read();
            
        }
    }
    class Books
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

以上的例子只是我們很常見的一個情境,那麼linq是不是支援我們.net中的所有類型呢,事實上linq支援所有實現了IEnumable<T>介面的集合,.net中的大部分集合都實現了該介面,但是並不是所有的集合都實現 了該介面事實上只有支援強型別胡集合才實現了該介面,如數組,list,字典等,都是強型別的,所以我們可以對這些對象應用linq to object技術。

對於非泛型的集合,如arrarlist,dataset等集合并沒有實現IEnumable<T>介面但是卻實現了IEnumabler介面,這樣的話是不是不能應泛型技術呢,當然這也還是有辦法去處理 的,我們後面會提到。

下面我們看一些linq的基本的操作:

where操作:

功能:條件過濾

操作符聲明:

public static IEnumerable<T> where<T>{

  this IEnumerable<T> source,

      Func<T,bool> predicate

}

predicate的第一個元素表明了將參與判斷的元素,若該元素判斷通過將返回為true,否則返回false

通過對source的觀察我們也可以發現,where實質為一擴充方法,這個通過this關鍵字已經很明顯的暴露了出來。而predicate的實現實質則是通過委託來做處理,通過對參數predicate的觀察也可以很明顯的反應出來.

同時where還提供了一個重載的版本:

public static IEnumerable<T> where<T>{

  this IEnumerable<T> source,

     Func<T,int,bool> predicate

}

predicate的第二個參數表示當前元素在源序列中的索引位置(以0為開始)

以下為該重載的一個範例代碼:

IEnumerable<Books> book=samplebooks.where(book,index)=>((book.Name.Contains("2") )&&( (index&1)==1));

以上代碼即為找出名稱中包含2且在序列中奇數位置的圖書

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.