Отражение с лямбда-выражением - PullRequest
0 голосов
/ 17 ноября 2011

Я хочу передать в методе три параметра. Имя класса (таблица), поле и ключевое слово.

Тогда я бы хотел взять с Entity Framework с отражением таблицу и найти поля с ключевым словом.

Что-то вроде

public List<object> FilterOptions(string keyword, string className, string field)
        {
            var objectSet = (System.Data.Objects.ObjectSet<dynamic>)DataContext.GetType().GetProperty(className).GetValue(DataContext, null);
            var options = objectSet.Where(x => x.GetType().GetProperty(field).GetValue(x, null) == keyword).ToList();
...
        }

Однако я получаю «Дерево выражений может не содержать динамическую операцию»

Когда я изменяю <dynamic> на <object>, я снова получаю ошибку.

1 Ответ

0 голосов
/ 23 февраля 2012

Я думаю, что это то, где вы хотите оказаться. Вам нужны имена полей для ваших сущностей?

в классе ObjectContext есть свойство, называемое MetadataWorkspace. Вы можете перейти к EntitySet, который имеет вызов свойства MetadataProperties. Как то так.

public List<object> FilterOptions(string keyword, string className, string field)
{
    return ObjectContext.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace).BaseEntitySets.Where(es => es.MetadataProperties.Any(mp => mp.Name == keywork));
    // This has not been tested but should get you on the right path.
}

см. ссылку .

Надеюсь, это поможет.

P.S. Я также рекомендовал бы принять больше ваших ответов. У вас есть только 33%. Что означает, что ваш вопрос в конечном итоге просто пройдет мимо. Помните, что если вы нашли ответ где-то еще, вы можете ответить на свой вопрос. : 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...