2014-03-06 3 views
12

У меня возникла проблема в запросе, где я хочу объединить 2 списка.Ошибка с соединением в Linq для объектов

Я хочу, чтобы объединить записи из таблиц мест и Местоположения в Модельной собственность Мест.

Fruits = (from e in db.Fruits 
      where !e.Excluded 
      select new FruitViewModel() 
      { 
       CodFood = e.CodFood, 
       Name = e.Name, 
       Color = e.Color, 
       Places = (from p in e.Places 
          where !p.Excluded 
          select new FruitViewModel() 
          { 
           CodPlace = p.CodPlace, 
           Name = p.Name 
          }).Union(
          from r in e.Locations 
          where !r.Excluido 
          select new FruitViewModel() 
          { 
           CodLocation = r.CodLocation, 
           Name = p.Name 
          }) 
      }), 

, но это дает мне:

System.NotSupportedException: появляется 'Project.ViewModel.Fruits.FruitsViewModel' в двух структурно несовместимых инициализаций в пределах одного LINQ к Entities запроса типа. Тип может быть инициализирован в двух местах в одном запросе, но только если в обоих местах установлены одни и те же свойства, и эти свойства устанавливаются в том же порядке.

можно объединить после выполнения Linq как this answer, но я хочу, чтобы держать вещи просто не меняется слишком много этого кода, если это возможно - запроса перед отложенным выполнением.

Как я могу это решить?

ответ

13

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

  Places = (from p in e.Places 
         where !p.Excluded 
         select new FruitViewModel() 
         { 
          CodLocation = "", 
          CodPlace = p.CodPlace, 
          Name = p.Name 
         }).Union(
         from r in e.Locations 
         where !r.Excluido 
         select new FruitViewModel() 
         { 
          CodLocation = r.CodLocation, 
          CodPlace = "", 
          Name = p.Name 
         }) 
+2

Работал! Спасибо! Я неправильно прочитал сообщение об ошибке. –

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