2008年7月25日 星期五

Could not find an implementation of the query pattern for source type 'XXX'

當我以 Linq 來查詢設定檔(app.config)的資料時,會使用下列的語法

System.Configuration.Configuration config =
       ConfigurationManager.OpenExeConfiguration(configFilePath);
      ZipConfigurationSection section = config.GetSection("zipSetting") as ZipConfigurationSection;
      var q = from i in section.Periods
              select i;

結果出現下面的錯誤

Could not find an implementation of the query pattern for source type 'A.B.PeriodsConfigurationElementCollection'.  'Select' not found.  Consider explicitly specifying the type of the range variable 'i'.   

這是因為 section.Periods 並未實作 IEnumable<T>。
這怎麼辦呢?

還好,這方面微軟已經幫我們注意到了。此時改用下面語法即可

var q = from i in section.Periods.Cast()
        select i;
Cast後的結果,就是 IEnumable<PeriodConfigurationElement>了。

同樣的方法,適用在 System.Collections 中的 Class,如 ArrayList
 

沒有留言:

Share with Facebook