黄忠成

風雪之閣 - i live,so i writing

黃忠成ID:Code6421
146199次访问,排名500好友0人,关注者20
coding
Code6421的文章
原创 95 篇
翻译 0 篇
转载 0 篇
评论 206 篇
Code6421的公告
關於我:

黃忠成

  • 資深.NET 技術顧問
  • Run! PC 雜誌專欄作者
  • 程序員雜誌文章作者
  • PC Magazine 雜誌專欄作者
  • MSDN 專欄作者
  • MSDN 特約專屬講師
  • Microsoft .NET專屬講師
  • 台灣微軟最有價值專家(MVP 2008)
  • 台灣微軟特約技術顧問


  • 批評,指教,鼓勵, 請 寫信給我
    轉載文章請使用連結模式,
    請勿整篇Copy! 謝謝!


    我所提供的教育訓練:

    Windows Forms
    ASP.NET 2.0
    如有課程需要,請與我聯絡!

  • 我的著作:

  • 最近评论
    inelm:great
    blackapple2006:很好 支持
    Will 保哥:非常棒的作法! ^_^
    pjhakka:您好~我利用您提供的方法去加入System.Core到vb.net2005,能加入參考,但不能執行Linq的工作?
    c#.net 2005我測試過可以跑,是只有vb 不能用這個方法嗎?
    TIANSHANREN:标榜顾问的人有多少真正懂技术的???无耻者居多吧!!
    文章分类
    收藏
      相册
      风雪之阁
      朋友
      LOLOTA
      Moli
      Will 保哥
      匡正
      小朱
      董大偉
      賴榮樞
      存档
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 LINQ 與 IEnumerable 介面收藏

      新一篇: 極意之道- .NET Framework 3.5 資料庫開發聖典 (相關資訊彙集 會不時更新) | 旧一篇: LINQ To SQL Synchronize Tool Beta

       
      LINQ IEnumerable 介面
       
       
      /黃忠成
       
        架構上而言,只要是實作IEnumerable<T>介面的物件,皆可做為LINQ To Objects的資料來源,那如果只是實作了IEnumerable介面的物件呢?以.NET Framework 1.1時我們常用的ArrayList來說,是否也能做為LINQ To Objects的資料來源呢?答案是肯定的,透過LINQ To Objects所提供的Cast或是OfType函式,我們可以輕易的將ArrayList轉變為實作IEnumerable<T>介面的物件,進而將IEnumerable介面的物件運用於LINQ To Objects中。
      static void Main(string[] args)
      {
                  ArrayList al = new ArrayList();
                  al.Add("1");
                  al.Add("2");
                  var item = (from s1 in al.Cast<string>()
                              where s1 == "2" select s1).First();
                  Console.WriteLine(item);
                  Console.ReadLine();
      }
      此手法也適用於實作IEnumerable介面的SqlDataReader物件。
      public static List<string> GetTables(SqlConnection conn)
      {
                  using (SqlCommand cmd = conn.CreateCommand())
                  {
                      if (conn.State == ConnectionState.Closed)
                          conn.Open();
                      cmd.CommandText = "exec sp_tables";
                      using (SqlDataReader reader =
                          cmd.ExecuteReader(CommandBehavior.CloseConnection))
                      {
                          return (from s1 in reader.OfType<IDataRecord>()
                                  where s1.GetString(s1.GetOrdinal("TABLE_TYPE")) == "TABLE"
                                  select s1.GetString(s1.GetOrdinal("TABLE_NAME"))).ToList();
                      }
                  }
      }
      重點是你必須了解,該Enumerable中內含的元素型別就是了。
      註: 當然,比起使用LINQ,直接於CommandText中下達【exec sp_tables @table_type = "'table'"還是比較方便的,本例只是為了演示如何將SqlDataReader等類僅實作IEnumerable但未實作IEnumerable<T>介面的物件運用於LINQ上。
       

      发表于 @ 2008年04月21日 02:37:00|评论(loading...)|编辑

      新一篇: 極意之道- .NET Framework 3.5 資料庫開發聖典 (相關資訊彙集 會不時更新) | 旧一篇: LINQ To SQL Synchronize Tool Beta

      评论:没有评论。

      发表评论  


      登录
      Csdn Blog version 3.1a
      Copyright © Code6421