Entity Framework返回自定义Query方法的值

时间:2011-02-11 16:57:18

标签: c# .net entity-framework

我是EF和MVC的新手,所以作为一项培训我正在研究像“BlogEngine”这样的东西。 我在我的项目等中使用存储库模式和T4作为返回单个实体或实体列表的常规方法(List)我没有问题,但我的问题是在我需要我的存储库或服务层类的情况下,返回自定义查询或者观点(sql)。

让我想象一下,我想显示所有类别的列表,包括每个类别的PostCount,或所有帖子的列表,包括CommentCount和一些其他自定义字段。我不知道我必须创建具有这些额外字段的新类或者什么,(如果我的项目中有很多不同的视图,那么这很整洁吗?)

我自己想出了方法白色“动态”返回值。

    public dynamic GetAllPostsWithRelatedData()
    {
        return (from post in (postRepository.GetAll() as ObjectQuery<Post>)
                             //.Include("Categories").Include("Tags")
                select new
                {
                    Categories = post.Categories,
                    Tags = post.Tags,
                    CommentsCount = post.Comments.Count,
                    post.User.UserName,
                    post.Content,
                    post.LastModified,
                    post.Slug,
                    post.Title
                });
    }

任何更好的想法?

1 个答案:

答案 0 :(得分:1)

Imo更好的想法是使用自定义类型进行投影或从存储库返回IQueryable<Post>,让上层定义查询并直接使用匿名类型。

当在运行时解析动态行为很有用时,应使用

dynamic关键字。不是这种情况。您确切地知道要从方法返回的类型。

如果要定义将经常使用的自定义视图,您也可以在SQL中定义它们并将它们映射为新实体(您可以更好地控制SQL)。您还可以使用EF的高级功能,例如DefiningQueryQueryView,这也会在您的模型中产生新的实体。