使用泛型类型System.Collections.Generic.List <t>需要1个类型参数</t>

时间:2014-02-26 07:03:38

标签: c# .net linq generics generic-collections

我将我的应用程序.Net Framework版本从3.5升级到4.5.1,并且我还将目标版本从3.5更改为4.5.1。我的应用程序使用Linq to SQL ..在我的应用程序中我正在使用类库,在类库中我需要在通用列表中传递多个参数...

在数据访问层我有方法,我试图将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个类型参数

如何实现此任务,您可以在Generic List中传递linq生成的多个类?

虽然我已将.Net Framework从3.5升级到4.5.1但仍然无法在类库中引用System.Tuple类

2 个答案:

答案 0 :(得分:4)

您无法使用两个类型参数声明列表。

您可以改为使用Tuple<T1, T2>List<Tuple<tblaccount, vendorCategory>>或使用2个属性创建自己的类。

但是看看你的代码,看起来你正试图将匿名类型实例作为方法结果返回。这不是匿名类型的用途:

  

您无法声明字段,属性,事件或返回类型   具有匿名类型的方法。同样,你不能声明   方法,属性,构造函数或索引器的形式参数   有匿名类型。传递匿名类型或集合   包含匿名类型,作为方法的参数,您可以   将参数声明为类型对象。但是,做到这一点就失败了   强打字的目的。 如果您必须存储查询结果或传递它们   在方法边界之外,考虑使用普通的命名结构   或类而不是匿名类型

     来自Anonymous Types (C# Programming Guide)

按照指南创建自己的类以保存查询结果,并将方法声明为List<MyClass>

答案 1 :(得分:0)

使用iQueryable Class返回匿名类型

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();
        }