【问题标题】:Query Table using Table Names or MetaTables - LINQ使用表名称或元表查询表 - LINQ
【发布时间】:2011-02-08 20:36:51
【问题描述】:

有没有办法在 LINQ 中使用 Meta Tales 或表名来构造动态查询?

foreach (var metaTable in db.Mapping.GetTables())
{
    var queryType = metaTable.RowType.Type;

    var test = from q in db.GetTable(queryType)
               select q;
}

有没有办法做这样的事情?上面的尝试产生了错误:

找不到源类型“System.Data.Linq.ITable”的查询模式的实现。未找到“选择”。考虑明确指定范围变量“q”的类型。

谢谢, 克里斯

【问题讨论】:

  • 这个循环应该能够从数据上下文中的每个表中全选
  • 简短的回答是“是”,但你可能需要做很多事情,比如MakeGenericMethod...
  • 你能发布长答案吗? :)

标签: c# .net vb.net linq


【解决方案1】:

“长答案”是很多讨厌的表达式代码:您必须从头开始为查询构建表达式树,因为编译器只有在所有内容都是强类型时才会这样做。但是,如果您只想获取所有行,只需编写

var test = db.GetTable(queryType).Cast<object>();

因为 ITable 接口已经是 IEnumerable。现在您仍然需要理解一系列无类型对象。

你能告诉我们你想做什么以及为什么?

【讨论】:

  • 我正在尝试基于数据上下文构建动态自定义查询。也感谢您的回答,这真的很有帮助。我相信这一点,参数名称会根据用户输入创建查询。
  • 谷歌 linq 动态查询。有一些帮助可用于从诸如 query.OrderBy("fieldName") 之类的字符串构造查询
【解决方案2】:

您是否包含了对 System.Data.Linq 命名空间的引用?如果缺少你,那么你可能会收到这个错误,因为我认为 LINQ 扩展方法来自那个。

【讨论】:

  • 这是正确答案。问题中发布的代码应该按原样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多