2010-10-25 130 views
5

我找不到一种方法将匿名类型作为类型参数传递给泛型类。匿名类型和泛型

//这是课堂上,我要实例

public class ExtArrayStore<T> : IViewComponent 
{ 
    public IQueryable<T> Data { get; set; } 

... //创建者类

public static class ArrayStoreGenerator 
{ 
    public static ExtArrayStore<T> CreateInstance<T>(IQueryable<T> query) 
    { 
     return new ExtArrayStore<T>(); 
    } 
} 

//尝试使用此

IQueryable usersQuery= ((from k in bo.usersselect new { userid = k.userid, k.username}).AsQueryable()); 
     var x = ArrayStoreGenerator.CreateInstance(usersQuery); 

我正进入(状态;

方法ArrayStoreGenerator.CreateInstance(System.Linq.IQueryable)的类型参数不能从使用情况中推断出来。尝试明确指定类型参数

有没有办法实现这一点? (我正在考虑接口并返回一个接口,但不知道它是否可行)任何人都可以帮助将匿名类型传递给泛型。

+0

您能否提供'ArrayStoreGenerator'的实现?我无法在Google上找到它,所以我怀疑这是您自己的图书馆。 – 2010-10-25 16:03:28

+0

它在那里。 – hazimdikenli 2010-10-26 07:07:17

回答

6

usersQuery正在键入作为非通用IQueryable因为你明确指定在变量的声明。

取而代之,做var usersQuery = ...。这将键入变量IQueryable<TAnon>,然后匹配ArrayStoreGenerator.CreateInstance的签名。

3

您应该将usersQuery定义为var。

2

如果您尝试var usersQuery局部变量而不是明确指定其类型,该怎么办?

0

尝试ToArray

var x = ArrayStoreGenerator.CreateInstance(usersQuery.ToArray());