Linq动态表

Linq动态表,linq,dynamic,Linq,Dynamic,linq中有一种使用字符串调用表的方法吗?我尝试了linq dynamic,但没有找到我想要的。因此,基本上我将有一个字符串,我传入一个参数,我将使用它调用我的表: 例: public IEnumerable<Category> SearchInTable(string table) var context = new MapEntities() ; myTable = context.Tables[table]; // something like that. Table ==

linq中有一种使用字符串调用表的方法吗?我尝试了linq dynamic,但没有找到我想要的。因此,基本上我将有一个字符串,我传入一个参数,我将使用它调用我的表:

例:

public IEnumerable<Category> SearchInTable(string table)

var context = new MapEntities() ;

myTable = context.Tables[table]; // something like that. Table == Country

return myTable.Where(x => x.name.Contains("Canada")).OrderByDescending(o => o.id).Take(10);
public IEnumerable SearchInTable(字符串表)
var context=新的MapEntities();
myTable=context.Tables[table];//差不多吧。表==国家
返回myTable.Where(x=>x.name.Contains(“加拿大”)).OrderByDescending(o=>o.id).Take(10);
我希望我是清楚的!多谢各位

public IQueryable<Category> SearchInTable(string table)
{
  var context = new MapEntities();
  IQueryable<Category> myTable;
  switch(table)
  {
    case "Canada": myTable=context.Canada; break;
    case "UnitedStates": myTable=context.UnitedStates; break;
    else throw new Exception("Table not found");
  }
  return myTable.Where(x => x.name.Contains("Canada")).OrderByDescending(o => o.id).Take(10);
}
(我可能也不会把.Take(10)放在搜索中,我会想出一个更好的名字,比如ContainsCanada,或者让搜索更通用一些)


(我可能也不会把.Take(10)放在搜索中,我会想出一个更好的名字,比如ContainsCanada,或者让搜索更通用一些)

你在使用什么数据访问技术?实体框架?可能与您使用的数据访问技术重复?实体框架?有可能复制吗?有没有一种不用开关盒就能实现的方法?假设我将有50个表具有相同的结构,所以我不想使用50个case。如果有50个表都具有相同的结构,那么您可能应该将其设计为一个表,在另一个表中添加一个带有FK的列。出于性能考虑,我更喜欢将我的表单独设置。我不想浏览包含50个类别的所有表格来获得我需要的类别。另外,每个类别可以有不同的行。如果我用一张桌子,速度会快得多。例如:如果category==country,那么从country表中获取数据,您是否实际检查了性能差异?因为我猜你无法测量它。至于必须遍历所有表才能得到所需的表,这就是索引的作用。你不应该做全表扫描,我同意。很明显,您将无法测量差异,因为您发出的绝大多数查询都应该使用索引,并且如果您使用附加列构建相同的索引,这将导致内存中的二叉树查找,其速度可能会有无法测量的差异。但是,您会发现,如果您在多个表中发出相同的查询,您现在已经生成了50个不同的查询计划,这些计划现在必须针对每个查询进行搜索(或者因为没有空间而被删除),以降低性能。有没有一种方法可以不用切换案例来完成?假设我将有50个表具有相同的结构,所以我不想使用50个case。如果有50个表都具有相同的结构,那么您可能应该将其设计为一个表,在另一个表中添加一个带有FK的列。出于性能考虑,我更喜欢将我的表单独设置。我不想浏览包含50个类别的所有表格来获得我需要的类别。另外,每个类别可以有不同的行。如果我用一张桌子,速度会快得多。例如:如果category==country,那么从country表中获取数据,您是否实际检查了性能差异?因为我猜你无法测量它。至于必须遍历所有表才能得到所需的表,这就是索引的作用。你不应该做全表扫描,我同意。很明显,您将无法测量差异,因为您发出的绝大多数查询都应该使用索引,并且如果您使用附加列构建相同的索引,这将导致内存中的二叉树查找,其速度可能会有无法测量的差异。但是,您会发现,如果您在多个表中发出相同的查询,那么您现在已经生成了50个不同的查询计划,这些计划现在必须针对每个查询进行搜索(或者由于没有空间而被删除),以降低性能。
public static IQueryable<Category> GetTable(this DataContext context,string table)
{
  IQueryable<Category> myTable;
  switch(table)
  {
    case "Canada": myTable=context.Canada; break;
    case "UnitedStates": myTable=context.UnitedStates; break;
    else throw new Exception("Table not found");
  }
  return myTable;
}

public static IQueryable<Category> Search(this IQueryable<Category> context)
{
  return context.Where(x => x.name.Contains("Canada")).OrderByDescending(o => o.id).Take(10);
}
var result=new MapEntities().GetTable("Canada").Search();