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