Фон:
У меня есть веб-служба, которая возвращает строки в таблице (с именем таблицы, предоставленным в качестве параметра )с идентификаторами, превышающими определенный идентификатор (, также предоставленный в качестве параметра ). Мы предполагаем, что идентификаторы являются последовательными.
Я использую Linq to SQL для взаимодействия с базой данных, поэтому я хочу вернуть новые строки как:
List
Поскольку мы знаем только имя таблицы во время выполнения, я не могу использовать Linq в обычном режиме, что значительно усложняет ситуацию.
Вопрос:
Код ниже (, и он работает ). Как я могу упростить это? Это кажется слишком сложным.
private object GetUpdateList(string tableName, int Id, DataClassesDataContext db)
{
PropertyInfo pi = db.GetType().GetProperty(tableName);
var table = pi.GetValue(db, null);
// Get type of object within the table.
Type genericType = table.GetType().GetGenericArguments()[0];
// The Where method lives on the Enumerable type in System.Linq
var whereMethods = typeof(System.Linq.Enumerable)
.GetMethods(BindingFlags.Static | BindingFlags.Public)
.Where(mi => mi.Name == "Where");
// There are actually 2 where methods - we want the one with 2 parameters
MethodInfo whereMethod = null;
foreach (var methodInfo in whereMethods)
{
var paramType = methodInfo.GetParameters()[1].ParameterType;
if (paramType.GetGenericArguments().Count() == 2)
{
// we are looking for Func, the other has 3
whereMethod = methodInfo;
break;
}
}
Func
Чтобы найти это решение, мне пришлось сослаться на следующие вопросы: