首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ITable转换为IEnuerable<object> -没有DataTable信息的动态LINQ查询

将ITable转换为IEnuerable<object> -没有DataTable信息的动态LINQ查询
EN

Stack Overflow用户
提问于 2017-02-19 19:23:25
回答 1查看 723关注 0票数 0

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

String TheTableNameSystem.Data.Linq.DataContext TheContext

代码语言:javascript
复制
    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;            
    }

像我在这里所做的那样,将ITable转换为IEnumerable<object>是正确的吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-19 19:54:24

短答案

不是的。

长答案

ITable具有以下签名:

代码语言:javascript
复制
public interface ITable : IQueryable, IEnumerable

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

代码语言:javascript
复制
public class MyTable : System.Data.Linq.ITable
{
    // Implementation ...
}

你这样做:

代码语言:javascript
复制
var myTable = new MyTable();
var iterator = myTable as IEnumerable<Object>;

它将返回null,因为MyTable实现ITable,而且两者都不实现IEnumerable<T>接口。

然而,这将起作用:

代码语言:javascript
复制
var iterator = myTable as IEnumerable; // or IQueryable

因此,取决于您所说的Is it correct to cast the ITable to an IEnumerable<object> as I've done here是什么意思。它不会抛出异常,但除非您使用它,否则它将不会产生任何结果,并且它将在这一行中以空引用异常而崩溃:

代码语言:javascript
复制
query = query.Where(whereField + "=" + whereValue); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42331762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档