簡體   English   中英

將ITable轉換為IEnuerable <object> -沒有數據表信息的動態LINQ to SQL查詢

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

我需要編寫動態LINQ,其中我對輸入表一無所知-數據提供程序(這就是為什么我使用LINQ to SQL),沒有表名,一無所知。 我希望能夠查詢給定用戶選擇的字段和給定值的數據,如下所示:

具有一個String TheTableNameSystem.Data.Linq.DataContext TheContext

    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: ITable ( v= ITable

簡短答案

沒有。

長答案

ITable具有以下簽名:

public interface ITable : IQueryable, IEnumerable

如果您有一個實現該類型的實例,如下所示:

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

然后執行此操作:

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

由於MyTable實現ITable並且它們都不實現IEnumerable<T>接口,因此它將返回null。

但是,這將起作用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM