C# 将ITable转换为IEnuerable<;对象>;-没有数据表信息的动态LINQ到SQL查询
我需要编写动态LINQ,在这里我对输入表数据提供程序一无所知(这就是为什么我使用LINQtoSQL),没有表名,什么都不知道。我希望能够查询给定用户选择字段和给定值的数据,如下所示: 具有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) {
字符串表名,以及系统.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);