2014-02-03 2 views
0

Я точно знаю, что говорит ошибка; однако я не уверен, как получить функциональность, которую я хочу от своего кода.Невозможно неявно конвертировать предложениеComCom для ICollection <SuggestionComment>

var item = from l in context.Suggestions 
         join a in context.SuggestionVotes on l.id equals a.SuggestionId 
         join b in context.SuggestionComments on l.id equals b.SuggestionId 
         join c in context.Users on b.UserId equals c.id 
         where l.id == id 
         select new Suggestion 
         { 
          id = l.id, 
          Title = l.Title, 
          Description = l.Description, 
          PosterId = l.PosterId, 
          SuggestionComments = b 
         }; 

Я пытаюсь установить SuggestionComments(ICollection<SuggestionComment>) равные для всех записей в моей таблице SuggestionComments, которые принадлежат к моему исходному объекту внушения.

Предложения

int id (PK) 
string Title 
string Description 

SuggestionComment

int id (PK) 
int SuggestionId (FK) 

ответ

0

Непосредственная проблема заключается в том, что b является SuggestionComment экземпляра, а не сборник SuggenstionComment с и вы пытаетесь установить его SuggestionComments nav коллекция свойство Suggestion объект.

Но ваша настоящая проблема в том, что вы используете соединения - почему вы не используете навигационные свойства? Например:

context.Suggestions 
    .Where(s => s.Id == id) 
    .Select(s => new Suggestion 
    { 
     id = s.id, 
     Title = s.Title, 
     Description = s.Description, 
     PosterId = s.PosterId, 
     SuggestionComments = s.SuggestionComments 
    }); 

Update после комментария, осветленной ситуацию:

var suggestion = context.Suggestions 
    .Where(s => s.Id == id) 
    .Select(s => new 
    { 
     Suggestion = s, 
     Comments = s.SuggestionComments, 
     CommentUsers = s.SuggestionComments.Select(sc => sc.User) 
    } 
    .Single() 
    .Select(at => at.Suggestion) 
    .Single(); 

// if tracking is enabled in your DbContext, the suggestion object 
// will have its SuggestionComments collection loaded 
// as well as each SuggestionComment's User property 
+0

Hm, это выглядит интересно, я не знал, что я мог бы сделать это. Обычно я это делаю. Включайте или используйте соединения, но для этого экземпляра. Включение не было, так как My suggestionComments сами содержат объекты User. В любом случае, я попробовал ваше предложение и получил «Сущность или сложный тип« jdmexchangeModel.Suggestion »не может быть сконструирован в запросе LINQ to Entities. – Adrian

+0

Я не совсем уверен, что вы пытаетесь сделать, поскольку просто копируете значения «Предложения» в новый экземпляр «Предложения» - почему вы не можете просто выбрать оригинал «Предложение»? Если вы действительно хотите это сделать, проецируйте результаты в анонимный класс, перечислите и создайте новый объект 'Предложения' – Moho

+0

. То, что я в основном пытаюсь сделать, это что-то вроде этого. 'Предложение s = context.Suggestions.Include (P => P.SuggestionComments.Include (P => P.User)). Single()', который не представляется возможным. Вот почему я пытался использовать объединения, чтобы вручную самостоятельно установить все свойства. My SuggestionComment имеет идентификатор '(FK)' to my Users table '(PK) id'. Это имеет смысл? – Adrian

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