Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Linq使用变量作为模型_C#_Asp.net Mvc_Linq To Entities - Fatal编程技术网

C#Linq使用变量作为模型

C#Linq使用变量作为模型,c#,asp.net-mvc,linq-to-entities,C#,Asp.net Mvc,Linq To Entities,尝试编写一段动态代码,因为它可以接受任意数量的可能模型定义 目前的硬代码是: var items = _context.Events.ToList(); foreach (var item in items) { (...) } 我想做的是使\u context.Events.ToList()成为更像\u context.{保存模型名的变量}.ToList() 比如: var modelName = "Table1" var items = _context.modelName.T

尝试编写一段动态代码,因为它可以接受任意数量的可能模型定义

目前的硬代码是:

var items = _context.Events.ToList();

foreach (var item in items)
{
     (...)
}
我想做的是使
\u context.Events.ToList()成为
更像
\u context.{保存模型名的变量}.ToList()

比如:

var modelName = "Table1"
var items = _context.modelName.ToList();

foreach (var item in items)
{
     (...)
}
MethodInfo method = typeof(Queryable).GetMethod("OfType");
MethodInfo generic = method.MakeGenericMethod(new Type[] { eventType });
var set = (IQueryable<Event>)generic.Invoke(null, new object[] { _context.Events });
我考虑将项声明为泛型变量,这样即使在if或switch中设置,整个方法也可以使用它,但不知道将其声明为什么

这样做可能吗?

试试这个:

var table = (ITable)context.GetType()
                           .GetProperty(modelName)
                           .GetValue(context, null);

我希望能有所帮助:)

实体框架有一个通用的
访问器,但类型必须在编译时已知:

var foo = _context.Set<Foo>();

例如,如果您的
eventType
是“Film”,这将有效地为您提供与
\u context.Set()
类似的查询集(其中
Film
将是
Event
的派生类)。然后,您可以利用正常的LINQ查询功能,如
Where
Select
,等等。在
set

上,您在foreach中做什么?如果要修改数据或创建新的数据集,扩展方法会更好。您没有告诉我们什么是
\u context
,因此我们无法知道是否有能力使用字符串作为实体名称。只需加载ViewModel将数据传递回DOM
\u context
就是定义数据库连接的DBContext变量