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

C# 使用表名或元表查询表-LINQ,c#,.net,vb.net,linq,C#,.net,Vb.net,Linq,在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.Lin

在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”的查询模式的实现选择“未找到”。考虑显式指定范围变量“q”的类型。

谢谢, Chris

这个“长答案”是一大堆令人讨厌的表达式代码:你必须从头开始为你的查询建立表达式树,因为编译器只在所有内容都是强类型的情况下才这样做。但是,如果您只想获取所有行,只需编写

var test = db.GetTable(queryType).Cast<object>();
var test=db.GetTable(queryType.Cast(); 因为ITable接口已经是IEnumerable。现在,您仍然需要理解一系列非类型化对象


您能告诉我们您想要做什么以及为什么吗?

您是否包含了对System.Data.Linq命名空间的引用?如果您没有注意到这一点,那么您可能会遇到这个错误,因为我认为LINQ扩展方法就是由此产生的。

这个循环应该能够从数据上下文中的每个表中选择所有内容。简短的回答是“是”,但您可能需要做很多事情,例如
MakeGenericMethod
…您能发布长答案吗?:)我正在尝试基于数据上下文构建一个动态自定义查询。也谢谢你的回答,这真的很有帮助。我相信有了它,参数名就会根据用户的输入创建查询。对于从诸如query.OrderBy(“fieldName”)之类的字符串构造查询,有一些帮助。这是正确的答案。问题中的代码应该按原样工作。