以下函数返回记录列表
public IList<T> GetAll()
{
return db.TabMasters.ToList<T>();
}
错误: 'System.Data.Objects.ObjectSet'不包含'ToList'的定义,并且最好的扩展方法重载'System.Linq.Enumerable.ToList(System.Collections.Generic.IEnumerable)'有一些无效的参数< / em>
答案 0 :(得分:2)
我认为TabMasters
是强类型集合,因此无法返回泛型类型的列表。您是否尝试过db.TabMasters.ToList()
?
答案 1 :(得分:2)
正确的语法是:
db.TabMasters.Cast<T>().ToList()
<强>文档强>
IEnumerable<TResult> Enumerable.Cast<TResult>(this IEnumerable source)
List<TSource> Enumerable.ToList<TSource>(this IEnumerable<TSource> source)
如果您不想使用LINQ扩展名List<T>
has a public constructor that accepts a single IEnumerable<T>
argument
答案 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似乎是可能的