2010-08-11 49 views
3

這是否正確使用IEnumerable或shell我是否使用List
我需要把什麼放在<PropertyInfo>IEnumerable vs List

public static IEnumerable<PropertyInfo> GetNewsList<T>(int FID) 
    { 
     CatomWebNetDataContext pg = (CatomWebNetDataContext)db.GetDb(); 
     return (from nls in pg.NewsCat_ITEMs 
        join vi in pg.VIRTUAL_ITEMs on nls.NC_VI_ID equals vi.VI_ID 
        where vi.VI_VF_ID == FID 
        select new { nls, vi }); 


    } 

public List<PropertyInfo> GetPublic<T>(int FID) 
    { 
     CatomWebNetDataContext pg = (CatomWebNetDataContext)db.GetDb(); 
     var nl = (from nls in pg.NewsCat_ITEMs 
       join vi in pg.VIRTUAL_ITEMs on nls.NC_VI_ID equals vi.VI_ID 
       where vi.VI_VF_ID == FID 
       select new { nls, vi }); 

     List<PropertyInfo> retList = new List<PropertyInfo>(); 

     foreach (var item in nl) 
     { 
      retList.Add(item); 
     } 


     return retList; 
    } 
+0

關於您更新的問題..您不需要準備這樣的列表,看看我給您的示例;) – 2010-08-11 05:52:12

+0

作爲一個旁白,您的linq查詢看起來很時髦。如果你的dbml有關係,那麼連接就不需要了。返回db.GetDb()。NewsCat_ITEMs.Where(x => x.VIRTUAL_ITEMs.VI_VF_ID == FID).ToList(); – itchi 2010-08-11 06:45:05

回答

3

列表是類型的instace,實現IEnumerable。這是什麼意思?如果你想返回IEnumerable<PropertyInfo>你必須創建它的列表(或數組等),然後返回它。從方法的外部看起來你將返回IEnumerable<PropertyInfo>,但實際上它會是List<PropertyInfo>

關於您的查詢...您必須選擇PropertyInfo類型的對象,但現在您只需返回一些anonymouse類型。你應該這樣嘗試:

public static IEnumerable<PropertyInfo> GetNewsList<T>(int FID) 
{ 
    CatomWebNetDataContext pg = (CatomWebNetDataContext)db.GetDb(); 
    var result from nls in pg.NewsCat_ITEMs 
       join vi in pg.VIRTUAL_ITEMs on nls.NC_VI_ID equals vi.VI_ID 
       where vi.VI_VF_ID == FID 
       select new PropertyInfo { SomeMember = nls, SomeOtherMember = vi }; 

    return result.ToList(); 
} 
+0

現在我得到 無法找到類型或命名空間名稱'PropertyInfo'(您是否缺少使用指令或程序集引用?) – eyalb 2010-08-11 06:02:11

+0

好吧,請告訴我您的更新代碼;) – 2010-08-11 06:03:43

+0

public static IEnumerable GetNewsList (int FID) { CatomWebNetDataContext pg =(CatomWebNetDataContext)db.GetDb(); VAR結果=(從pg.NewsCat_ITEMs NLS 在nls.NC_VI_ID pg.VIRTUAL_ITEMs加入六等於vi.VI_ID 其中vi.VI_VF_ID == FID 選擇新newsListItems {TT = NLS,TT2 =六}); return result.ToList(); } – eyalb 2010-08-11 06:04:55

3

這取決於你想要對結果做什麼。 IEnumerable基本上只支持迭代集合中包含的結果。 IList更爲具體,並允許您:

  • 瞭解有多少項目是集合中沒有通過所有這些迭代
  • 輕鬆訪問項目的特定位置列表
  • 添加或從列表中刪除項目

等等。如果你不需要額外的功能,我會返回IEnumerable。您的方法的調用者可以輕鬆地完成您將項目添加到List的操作。

0

您可以返回List<PropertyInfo>,因爲它的執行範圍是IEnumerable<PropertyInfo>。唯一的一點是,一旦它返回,調用者函數將看起來像一個普通的舊IEnumerable