在运行时从IList创建IQueryable of Unknown Type

时间:2013-02-20 20:01:28

标签: c# reflection iqueryable

我有一个类型实体的IList。

我有一个字符串,表示从Entity派生的类的类型。

我需要使用字符串将我的IList转换为从Entity派生的Type的IQueryable。

遗憾的是,Entity和派生类的程序集不是正在执行的程序集。

2 个答案:

答案 0 :(得分:1)

这是动态linq和反射的方法

var list = new List<Company>()
{
    new Company { Foo = "1", NoEmployees = 1 },
    new Company { Foo = "3", NoEmployees = 3 }
};

MethodInfo method = typeof(Queryable).GetMethods().Where(x => x.Name == "AsQueryable" && x.IsGenericMethod).First();
MethodInfo generic = method.MakeGenericMethod(new Type[] { Type.GetType(typeString) });

var queryable = (IQueryable)generic.Invoke(null, new object[] { list });

var result = queryable.Select("new (NoEmployees)").Where("NoEmployees > 2").OfType<object>().ToList();

下次会更明确

答案 1 :(得分:0)

请提供更多信息,这是我能想到的唯一可能是你想要的东西。

var queryable = new List<dynamic>();
foreach(var entity in IList<Entity>)
{
    dynamic companyProfile = Convert.ChangeType(entity, Type.GetType(typeString));
    if (companyProfile.CompanyProfileId == "something")
        queryable.Add(companyProfile);
    // Do Stuff
}
// Do Stuff