C #: доступ к свойству класса, когда идентификатор свойства известен как строка - PullRequest
1 голос
/ 19 мая 2010

Я использую LINQ to Entities в базе данных, структура которой заранее неизвестна. Я использую отражение, чтобы получить информацию, и теперь у меня есть список строк со всеми именами таблиц. Поскольку я использую LINQ, у меня также есть источник данных, инкапсулированный в класс C # (linqContext), где каждая таблица является свойством этого класса.

Чего я хочу достичь, так это: Предположим, что одной из строк в списке имен таблиц является «Сотрудники». Это известно из кода, я хочу сделать следующее:

linqContext.Employees.DoSomethingHere();

Возможно ли это? Я знаю, что если бы все свойства были просто элементами в списке, я мог бы использовать строку в качестве индексатора, linqContext["Employees"]. Однако это не так: (

Ответы [ 3 ]

2 голосов
/ 19 мая 2010

Во-первых, я бы не использовал рефлексию для получения этой информации, я бы использовал свойство MetadataWorkspace ObjectContext, поскольку оно уже содержит информацию. Примерно так:

EntityContainer container = context.MetadataWorkspace
    .GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
var setNames = container.BaseEntitySets.Select(b =>b.Name);

Получив имена наборов, вы можете получить данные из определенного набора следующим образом:

context.CreateQuery<T>("[" + entitySetName + "]");

Общий репозиторий, который я использую, на самом деле ищет в контейнере набор сущностей, который соответствует данному типу, так что вызывающий код может просто передать тип и вернуть соответствующую коллекцию.

0 голосов
/ 19 мая 2010

Используйте отражение, чтобы либо получить именованное свойство DataContext, либо получить тип объекта, а затем вызвать DataContext.GetTable (type).

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