C# 将ITable转换为IEnuerable<;对象>;-没有数据表信息的动态LINQ到SQL查询

C# 将ITable转换为IEnuerable<;对象>;-没有数据表信息的动态LINQ到SQL查询,c#,linq,linq-to-sql,dynamic-linq,C#,Linq,Linq To Sql,Dynamic Linq,我需要编写动态LINQ,在这里我对输入表数据提供程序一无所知(这就是为什么我使用LINQtoSQL),没有表名,什么都不知道。我希望能够查询给定用户选择字段和给定值的数据,如下所示: 具有字符串表名,以及系统.Data.Linq.DataContext上下文: IEnumerable<object> GetQuery(List<string> theWhereFields, List<string> theWhereValues) {

我需要编写动态LINQ,在这里我对输入表数据提供程序一无所知(这就是为什么我使用LINQtoSQL),没有表名,什么都不知道。我希望能够查询给定用户选择字段和给定值的数据,如下所示:

具有
字符串
表名
,以及
系统.Data.Linq.DataContext
上下文

    IEnumerable<object> GetQuery(List<string> theWhereFields, List<string> theWhereValues)
    {
        // for doing dynamically ala http://stackoverflow.com/a/25859319/3661120            

        var baseTable = (ITable)TheContext.GetType()
                            .GetProperty(TheTableName).GetValue(TheContext, null); // http://stackoverflow.com/a/1924966/3661120                       

        IEnumerable<object> query = (IEnumerable<object>) baseTable;
        for (int i = 0; i < theWhereFields.Count; i++)
        {
            var whereField = theWhereFields[i];
            var whereValue = theWhereValues[i];
            query = query.Where(whereField + "=" + whereValue);  // possible due to System.Linq.Dynamic
        }

        return query;            
    }
IEnumerable GetQuery(列出Where字段,列出Where值)
{
//为了做这些事http://stackoverflow.com/a/25859319/3661120            
var baseTable=(ITable)TheContext.GetType()
.GetProperty(表格名称).GetValue(上下文,null);//http://stackoverflow.com/a/1924966/3661120                       
IEnumerable查询=(IEnumerable)基表;
for(int i=0;i
ITable
转换为
IEnumerable
是否正确


ITable
来自
System.Data.Linq

简短回答

没有

长答案

ITable
具有以下签名:

public interface ITable : IQueryable, IEnumerable
如果您有一个实现该功能的类型实例,如下所示:

public class MyTable : System.Data.Linq.ITable
{
    // Implementation ...
}
你可以这样做:

var myTable = new MyTable();
var iterator = myTable as IEnumerable<Object>;
因此,根据您所说的
的意思,将ITable转换为IEnumerable是否正确,就像我在这里所做的那样。它不会引发异常,但在您使用它之前,它不会产生任何结果,并且它会在这一行引发空引用异常:

query = query.Where(whereField + "=" + whereValue); 

什么是
ITable
?请参见此处:。它是IQueryable,但不一定是IEnumerable。Context是数据集,因此您如何知道需要哪个表?对不起,还有一个字符串
表名
。将编辑以反映。好的,谢谢。我想我只会使用
IQueryable
query = query.Where(whereField + "=" + whereValue);