使用表名或元表查询表 - LINQ

4
有没有办法在LINQ中使用元数据或表名构建动态查询?
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”的查询模式实现。未找到“Select”。考虑明确指定范围变量“q”的类型。
谢谢, Chris

此循环应能选择数据上下文中每个表中的所有内容。 - Chris Lucian
简短的回答是“是”,但你可能需要做很多像MakeGenericMethod这样的事情... - Marc Gravell
1
你能发布长答案吗? :) - Chris Lucian
2个回答

3
“长答案”是一堆令人讨厌的表达式代码:如果一切都是强类型的,编译器才会构建查询的表达式树。但是,如果你只想获取所有行,只需写下以下内容:
var test = db.GetTable(queryType).Cast<object>();

因为ITable接口已经是IEnumerable,所以现在你仍需要理解一系列未经类型化的对象。你能告诉我们你想做什么和为什么吗?

我正在尝试基于数据上下文构建动态自定义查询。同时感谢您的答案,它真的很有帮助。我相信通过这个和参数名称可以根据用户输入创建查询。 - Chris Lucian
在谷歌上搜索“linq动态查询”,可以找到一些帮助文档,用于构建字符串查询,例如query.OrderBy("fieldName")。 - usr

1
你是否已经引用了 System.Data.Linq 命名空间?如果缺少它,那么你可能会得到这个错误,因为我认为 LINQ 扩展方法来自于它。

这是正确的答案。问题中发布的代码应该可以直接使用。 - Peter Majeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接