Cast ITable to IEnuerable<object> - Dynamic LINQ to SQL Query with no DataTable information

Cast ITable to IEnuerable<object> - Dynamic LINQ to SQL Query with no DataTable information

我需要编写动态 LINQ,其中我对输入一无所知 table - 数据提供程序(这就是我使用 LINQ to SQL 的原因),没有 table 名称, 没有什么。我希望能够查询给定用户选择的字段和给定值的数据,如下所示:

String TheTableNameSystem.Data.Linq.DataContext TheContext:

    IEnumerable<object> GetQuery(List<string> theWhereFields, List<string> theWhereValues)
    {
        // for doing dynamically ala             

        var baseTable = (ITable)TheContext.GetType()
                            .GetProperty(TheTableName).GetValue(TheContext, null); //                        

        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;            
    }

ITable 转换为 IEnumerable<object> 是否正确?

注意 ITable 来自 System.Data.Linqhttps://msdn.microsoft.com/en-us/library/system.data.linq.itable(v=vs.110).aspx

简答

没有.

长答案

ITable 有这个签名:

public interface ITable : IQueryable, IEnumerable

如果您有一个实现该类型的实例,如下所示:

public class MyTable : System.Data.Linq.ITable
{
    // Implementation ...
}

然后你这样做:

var myTable = new MyTable();
var iterator = myTable as IEnumerable<Object>;

它将 return 为空,因为 MyTable 实现了 ITable 而它们都没有实现 IEnumerable<T> 接口。

但是,这会起作用:

var iterator = myTable as IEnumerable; // or IQueryable

所以取决于你所说的 Is it correct to cast the ITable to an IEnumerable<object> as I've done here 是什么意思。它不会抛出异常,但在您使用它之前它永远不会产生任何结果,并且它会在这一行中出现空引用异常:

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