2014-02-26 107 views
1

我升級了我的應用程序.Net Framework版本從3.5到4.5.1,我也將目標版本從3.5更改爲4.5.1。我的應用程序使用Linq到SQL ..在我的應用程序中我使用類庫和類庫中我需要通過通用列表中的多個參數...使用泛型類型System.Collections.Generic.List <T>需要1個類型參數

在數據訪問層我有方法,我想通過一個由Linq生成的多個類到Sql。 (tblaccount,vendorCategory)

internal class BasicDataDAO 
{ 

    internal List<tblaccount, vendorCategory> GetAllvendor() 
    { 
     using (CommonDataContext VendorDC = new CommonDataContext(Settings.ConnectionString)) 
     { 
      VendorDC.DeferredLoadingEnabled = true; 

      return (from V in VendorDC.tblaccounts 
        join C in VendorDC.vendorCategories on V.CatID equals C.Vendor_CatID 
          where V.Sys_AC_type == 7 
          select new 
          { 
           V.ID, 
           V.ACCOUNT, 
           V.field2, 
           V.contactDetails, 
           V.Remarks, 
           V.field3, 
           V.field1, 
           V.email, 
           V.fax, 
           C.vendor_CategoryName 
          }).ToList();   
       } 
      } 
} 

在這裏,我怎麼處理這個商業層

public List<tblaccount, vendorCategory> GetAllVendors()  
{ 
      BasicDataDAO dao = new BasicDataDAO(); 
      return dao.GetAllvendor();    
} 

,但我得到這個錯誤的數據和業務層

使用通用類型System.Collections.Generic.List需要1個類型參數

如何實現這個任務,您可以在其中傳遞由通用列表中的linq生成的多個類?

雖然我已經從3.5升級.net框架4.5.1,但仍然我不能夠引用在我的類庫

+0

相關,但不是完全相同的副本(我認爲):使用通用型'System.Collections.Generic.List '需要1個類型參數](http://stackoverflow.com/questions/3223102/using-the-generic-type-system-collections-generic-listt-requires-1-type-申辯)。 – 2014-06-03 19:04:34

回答

4

你不能聲明有兩個類型參數列表中的System.Tuple類。

您可以使用Tuple<T1, T2>來代替:List<Tuple<tblaccount, vendorCategory>>或創建您自己的具有2個屬性的類。

但看着你的代碼,它看起來像你試圖返回匿名類型的實例作爲方法的結果。那不是匿名類型是:

你不能聲明一個字段,屬性,事件,或方法的返回類型 爲具有匿名類型。同樣,您不能聲明 具有匿名類型的方法,屬性,構造函數或索引器的形式參數爲 。要將匿名類型或包含匿名類型的集合 作爲參數傳遞給方法,可以將參數聲明爲類型對象。但是,這樣做會破壞強打字的目的。 如果您必須存儲查詢結果或在方法邊界外傳遞它們 ,請考慮使用普通名爲struct 或class而不是匿名類型

Anonymous Types (C# Programming Guide)

遵循的指導方針和創建自己的類來保存你的查詢結果,並宣佈方法List<MyClass>

+0

hi @MarcinJuraszek如果使用iqueryable返回匿名類型,請參閱我的答案,並告訴我這個技巧是否會產生任何問題 –

+0

@SiddiqBaig您可以將其作爲非泛型'IQueryable'返回,但您看起來類型安全同時訪問結果。 – MarcinJuraszek

0

使用IQueryable的類返回一個匿名類型

public IQueryable GetAllvendor() 
     { 
      CommonDataContext VendorDC = new CommonDataContext(Settings.ConnectionString); 
      { 
       VendorDC.DeferredLoadingEnabled = false; 

       var List = (from V in VendorDC.tblaccounts 
          join C in VendorDC.vendorCategories on V.CatID equals C.Vendor_CatID 
          where V.Sys_AC_type == 7 
          select new 
          { 
           V.ID, 
           V.ACCOUNT, 
           V.field2, 
           V.contactDetails, 
           V.Remarks, 
           V.field3, 
           V.field1, 
           V.email, 
           V.fax, 
           C.vendor_CategoryName 
          }); 

       return List; 
      } 

     } 

和調用現場

public IQueryable GetAllVendors() 
     { 

      BasicDataDAO dao = new BasicDataDAO(); 
      return dao.GetAllvendor(); 
     } 
相關問題