Предотвращение повторяющегося кода проекции в Entity Framework

Я пытаюсь решить проблему, аналогичную описанной здесь

Инициализация строго типизированных объектов в LINQ to Entities

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

select new pocoClass
 {
   // complex projection that is several pages long includes grabbing a graph of data
 }

на данный момент он существует для каждого запроса в репозитории.Я пробовал переместить его в инициализатор объекта, но это дало мне ужасное «в LINQ to Entities поддерживаются только конструкторы и инициализаторы без параметров». проблема.

Я пробовал разделить на два запроса

var candidates = (from thing in _entities.whatever
  where (complex.stuff==true)
  select thing);

var final = (from thing in candidates.AsEnumerable()
  let x = thing.ITEMS.Where(blah=>blah.blah==param)
  let y = x.OTHERITEMS.FirstOrDefault()
  select new pocoClass(thing,x,y);

, но здесь final всегда равен нулю, а код в новом pocoClass никогда не вызывается. Я включил let x и y выше, потому что они всегда различаются в зависимости от использования проекции.

Итак, мне нужно вернуться к множеству копий моей проекции или есть другой выход из этого?

5
задан Community 23 May 2017 в 11:48
поделиться