Linq to SQL фильтруется ассоциация? - PullRequest
0 голосов
/ 13 октября 2009

открытый класс ForumTopic { public Guid ForumTopicId {get; задавать; } public Guid OwnerId {get; задавать; } public Guid CategoryId {get; задавать; } public DateTime CreatedDate {get; задавать; } публичная строка Topic {get; задавать; } public bool IsSticky {get; задавать; } public bool IsClosed {get; задавать; } public int ViewCount {get; задавать; } public int TotalComments {get; задавать; } Публичный комментарий LastComment {get; задавать; } }


Затем у меня есть запрос Linq, и мне нужно выяснить, как заполнить LastComment, и я не могу создать новый ForumTopic, потому что Linq сообщает мне, что он нарушает правила ...

IQueryable<ForumTopic> query = from topic in context.ForumTopics

                               join comment in context.Comments on topic.ForumTopicId equals comment.TargetId into topicComments
                               from lastComment in topicComments.DefaultIfEmpty().OrderByDescending(c => c.CreatedDate).Take(1)

                               orderby topic.IsSticky, topic.CreatedDate descending
                               select topic;

Запрос возвращает все правильно в SQL, но topic.LastComment имеет значение null.

Есть идеи?

1 Ответ

1 голос
/ 13 октября 2009

Основная проблема в том, что вы не назначаете LastComment. Без связи, установленной в базе данных, он не знает, как заполнить этот объект.

Вам необходимо вручную назначить комментарий:

IQueryable<ForumTopic> query = from topic in context.ForumTopics

orderby topic.IsSticky, topic.CreatedDate descending
select new ForumTopic 
{
  ForumTopicId = topic.ForumTopicId,
  OwnerId = topic.OwnerId,
  // .. etc
  LastComment = topic.Comments.OrderByDescending(c => c.CreatedDate).FirstOrDefault();
};

Очевидно, я предполагаю, что между темой и комментариями есть отношения между родителями и детьми. Если вы этого не сделаете, вы должны пересмотреть, как вы используете linq: p

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