[英]Cast ITable to IEnuerable<object> - Dynamic LINQ to SQL Query with no DataTable information
我需要編寫動態LINQ,其中我對輸入表一無所知-數據提供程序(這就是為什么我使用LINQ to SQL),沒有表名,一無所知。 我希望能夠查詢給定用戶選擇的字段和給定值的數據,如下所示:
具有一個String
TheTableName
和System.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
具有以下簽名:
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.