2016-08-18 2 views
2

Я использую Entity Framework для запуска запроса в таблице. Однако мне нужно только выбрать столбцы.Как создать динамическое выражение Linq Select Expression с анонимными объектами

class MyEvent 
{ 
    public string Name { get; set; } 
    public int Id { get; set; } 
    virtual Stage EventStage { get; set; } 
    ..... more columns ..... 
} 

class Stage 
{ 
    public string Name { get; set; } 
    public string Location { get; set; } 
    ..... more columns ..... 
} 

Я могу написать IQueryable вернуть их как

dbContext.MyEvents 
     .Select(s => 
      new { 
        Name = s.Name, 
        Id = s.Id, 
        EventStage = new 
        { 
         Name = s.EventStage.Name, 
         Id = s.EventStage.Id 
        } 
       } 
      ) 
      .ToList(); 

Это работает, как ожидалось, давая мне только те столбцы, я заинтересован в.

Теперь, мне нужно построить что «Выбрать 'динамически вызывать использование дерева выражений, что-то like here.

Как я могу это достичь? Возможно ли построить какой-либо объект, как описано выше, с помощью выражений?

EDIT: Вариант использования для меня состоит в том, что у меня есть общий класс контекста дБ, который принимает список столбцов в качестве строк, которые нужно извлечь. Раньше мы возвращали все столбцы, игнорируя этот список ввода. Итак, теперь мне нужно динамически генерировать оператор select, чтобы возвращать только необходимое подмножество столбцов, которое может быть выполнено через анонимный объект или динамически созданный DTO.

Thanks

+0

Не могли бы вы привести пример использования, которое вы хотите? – Michael

+0

Анонимные классы - это реальные классы во время компиляции. Поэтому для создания лямбды во время выполнения вы также должны построить класс во время выполнения. Используйте отражение для создания типа класса и полей внутри него, а затем создайте запрос с ним (я не сделал это сам, потому что это странно) – Szer

+0

@Michael: обновленный вариант использования – sppc42

ответ

-2

Определите сильно типизированный объект и верните его. Я бы не использовал динамический объект.

Примечание: вы не можете вернуть анонимный объект.

+0

Не знаю, что случилось с моим ответом, поэтому я перепробовал его. –

Смежные вопросы