如何返回IList <t> </t>

时间:2011-06-29 06:29:01

标签: asp.net-mvc asp.net-mvc-3

以下函数返回记录列表

 public IList<T> GetAll()
 {
   return db.TabMasters.ToList<T>();
 }

错误: 'System.Data.Objects.ObjectSet'不包含'ToList'的定义,并且最好的扩展方法重载'System.Linq.Enumerable.ToList(System.Collections.Generic.IEnumerable)'有一些无效的参数< / em>

4 个答案:

答案 0 :(得分:2)

我认为TabMasters是强类型集合,因此无法返回泛型类型的列表。您是否尝试过db.TabMasters.ToList()

答案 1 :(得分:2)

答案 2 :(得分:1)

IList<T>List<T>和其他几个类似容器使用的Interface。您无法返回接口本身 - 您必须返回实现IList<T>的对象。虽然我不确切知道你的情况,但最好的选择很可能是List<T>

此外,您对通用类型T有疑问。如果您希望该方法是通用的,那么您必须将db.TabMasters中的所有值强制转换为类型T.这会变得棘手,因为您必须限制用于T的可能类型以防止由无效引起的异常演员(见here)。如果您只需要返回一种类型,那么您应该将其定义为返回类型而不是使用T。例如,假设db.TabMasters中的所有值均为string。然后你会用:

public IList<string> GetAll()
{
    return db.TabMasters.ToList();
}

如果你真的需要这个方法是通用的,那么你必须将db.TabMasters中的值转换为你想要返回的类型:

public IList<T> GetAll<T>()
{
    return db.TabMasters.Cast<T>().ToList();
}

请注意,如果db.TabMasters中存储的对象类型无法转换为T,则该方法将抛出InvalidCastException

快乐的编码!

答案 3 :(得分:0)

你看过这里http://msdn.microsoft.com/en-us/library/dd412719.aspx

似乎有一些可能有用的方法AsEnumerable和GetList似乎是可能的