1

以下查询在我执行时无法加载表:

IEnumerable<Bookmark> tempBookmarks = ListBookmarksByUserID(userID);
IEnumerable<CandidateWithBookmarks> results = (from c in _internshipEntities.CandidateSet
                                            .Include("education")
                                            .Include("progress")
                                            .Include("contacts")
                                            .Include("availability")
                                            .Include("hosttypes")
                                            .Include("hostsizes")
                                            .Include("hostcapacities")
                                            .Include("hoststates")
                                            .Include("users")
                       join b in tempBookmarks on c.ID equals b.candidates.ID
                       select new CandidateWithBookmarks()
                                  {CandidateObject = c, BookmarkObject = b});
return results;

我找到了一些与该问题相关的文章,即Alex James 的文章“如何使 Include 真正包含”。该解决方案附带一个警告:

为此,您的最终选择必须是实体,即选择帖子而不是选择新{...}

这显然是上述代码块的问题。对于这个问题,是否有任何其他已知的解决方法不会破坏急切加载?

4

1 回答 1

2

我想我解决了这个问题,但它可能只适用于这个特定的实例,通过在加入后移动包含,查询似乎工作:

IEnumerable<CandidateWithBookmarks> results = (
    from b in tempBookmarks
    join c in _internshipEntities.CandidateSet
                                 .Include("education")
                                 .Include("progress")
                                 .Include("contacts")
                                 .Include("availability")
                                 .Include("hosttypes")
                                 .Include("hostsizes")
                                 .Include("hostcapacities")
                                 .Include("hoststates")
                                 .Include("users")
    on b.candidates.ID equals c.ID
    select new CandidateWithBookmarks(){CandidateObject = c, BookmarkObject = b});

编辑:与此类似的另一个查询也需要外部连接,这会产生一些问题,因为与此示例不同,您加入的内容很重要,但它仍然可行。

于 2009-09-17T19:38:45.003 回答