Мне нужно написать динамический LINQ, где я ничего не знаю о входной таблице - поставщике данных (именно поэтому я использую LINQ to SQL), нет таблицы имя, ничего. Я хочу, чтобы иметь возможность запрашивать данные, данные выбранные пользователем поля и заданные значения, что-то вроде следующего:Передача ITable в IEnuerable <object> - Динамический запрос LINQ to SQL без данных DataTable
Имея 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
от System.Data.Linq
, https://msdn.microsoft.com/en-us/library/system.data.linq.itable(v=vs.110).aspx
Что такое 'ITable'? – CodingYoshi
См. Здесь: https://msdn.microsoft.com/en-us/library/system.data.linq.itable(v=vs.110).aspx. Это IQueryable, но не обязательно IEnumerable. – dashnick
TheContext - это DataSet, так как вы знаете, какую таблицу вы хотите? – jdweng