Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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_Linq - Fatal编程技术网

C# 如何创建完全动态的linq查询?

C# 如何创建完全动态的linq查询?,c#,asp.net,linq,C#,Asp.net,Linq,我需要构建大约30个不同的管理页面来添加/编辑/删除30个不同表中的记录。显然,我可以花时间创建30个独特的页面来查询每个表,但我很好奇是否有一种方法可以简单地创建一个动态页面来查询一个动态linq查询。然后,此linq查询返回指定表中的所有字段和记录 我见过类似于此()的动态linq示例,但这仍然需要将表名硬编码到查询中。我想做一个类似于此的全选,在这里我传入表的名称(即“产品”、“订单”等),然后以某种方式查询该表: private List<tableName> MyDynam

我需要构建大约30个不同的管理页面来添加/编辑/删除30个不同表中的记录。显然,我可以花时间创建30个独特的页面来查询每个表,但我很好奇是否有一种方法可以简单地创建一个动态页面来查询一个动态linq查询。然后,此linq查询返回指定表中的所有字段和记录

我见过类似于此()的动态linq示例,但这仍然需要将表名硬编码到查询中。我想做一个类似于此的全选,在这里我传入表的名称(即“产品”、“订单”等),然后以某种方式查询该表:

private List<tableName> MyDynamicQuery(string tableName)
 {
      IEnumerable<tableName> dynamicList;

      using (MyEntities db = _conn.GetContext())
      {
           dynamicList = (from q in db.<tableName>
                        select q).ToList();
      }
      return dynamicList;
 }
私有列表MyDynamicQuery(字符串表名)
{
数不清的动力学家;
使用(MyEntities db=\u conn.GetContext())
{
dynamicList=(从q开始,单位为db。
选择q.ToList();
}
返回动态列表;
}
这样的事情有可能做到吗


谢谢

您可以使用实体框架并执行以下操作:

dynamiclist = this.datacontext.Set<T>().ToList(); // where T is the Type, represents the table in EF
dynamiclist=this.datacontext.Set().ToList();//其中T为类型,表示EF中的表格

不用表名,为什么不传入选择器?它看起来像这样:

private List<T> GetData<T>(Func<MyEntities, IEnumerable<T>> selector)
{
    using (MyEntities db = _conn.GetContext())
    {
        return selector(db).ToList();
    }
}

您是否听说过动态数据框架,它可能会对您有所帮助。LINQ不适合这样做。考虑使用原始<代码> DataReader <代码> s,微型ORMS,或<代码> DATABATE < /代码>。@ Salkes是正确的。我也遇到过类似的情况,我在运行中构建了SQL,并使用micro orm(准确地说是ServiceStack.OrmLite)返回数据。如果只将表名作为字符串,则无法获得强类型的返回值。由于您在编译时不知道该类型,即使您可以实现这样一个方法,您也永远不能调用它,除非您在编译时知道它的返回类型。它需要返回非静态类型的结果(即DataTable),或者您需要使用泛型,以便调用方在编译时知道返回类型。因为条件不是动态的,所以我认为您应该在架构的(.GetTableNames()中查找表名或者什么。返回列表呢?你不是指列表还是什么吗?你仍然需要提供表的类型。我认为OP需要表的类型作为字符串。他似乎已经有了EF数据模型。如果是这样,编译器将为你推断结果的类型。我不明白你的意思。你仍然需要传递
 IEnumerable
,那么,如果不将其设为对象或不使用30长的switch语句,您如何做到这一点呢?好吧,我想这将需要一个30长的switch语句,在这里,您可以为每种情况传递不同的
Func
。但这听起来比尝试使用字符串创建完全动态的解决方案更简单(而且是强类型的)。
var orders = GetData(db => db.Orders);