我正在尝试做一个简单的查询,包括急切的加载和投影,并遇到问题。我正在使用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仅支持强制转换 实体数据模型基元类型。“
那么,我该怎么办?
答案 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();
}