EF4包含()投影

时间:2011-01-02 20:33:42

标签: entity-framework linq-to-entities

我正在尝试做一个简单的查询,包括急切的加载和投影,并遇到问题。我正在使用CodeFirst CTP5,但我相信这个问题也影响了直接的EF4。

这是我的初步查询:

public List<ArticleSummary> GetArticles()
    {
        var articlesQuery = _db.Articles.Include(article => article.Category).Select(article => new ArticleSummary
        {
            Article = article,
            CommentsCount = article.Comments.Count
        });

        return articlesQuery.ToList();
    }

这会导致article的category属性为null。如果我取出投影,它就可以正常工作。阅读this之后,似乎建议我需要在投影后进行包含,因此我将查询更改为:

    public List<ArticleSummary> GetArticles()
    {
        var articlesQuery = _db.Articles.Select(article => new ArticleSummary
        {
            Article = article,
            CommentsCount = article.Comments.Count
        });

        articlesQuery = articlesQuery.Include(x => x.Article.Category);

        return articlesQuery.ToList();
    }

这导致异常(见下文),类似于this SO post

  

“无法投射该类型   'System.Linq.IQueryable 1' to type 'System.Data.Objects.ObjectQuery 1'。   LINQ to Entities仅支持强制转换   实体数据模型基元类型。“

那么,我该怎么办?

1 个答案:

答案 0 :(得分:4)

你可以尝试:

public List<ArticleSummary> GetArticles()
{
    var articlesQuery = _db.Articles.Select(article => new
        {
            Article = article,
            Category = article.Category
            CommentsCount = article.Comments.Count
        }
    ).ToList().
    Select(
       x => new ArticleSummary() 
       {
            Article = x.Article,
            CommentsCount = x.CommentsCount
       }
    );

    return articlesQuery.ToList();
}