如何在c#程序中调试查询?

时间:2013-12-26 12:16:27

标签: c# linq entity-framework

我想更有效地编写查询。

我不希望在查询结束之前,提取数据列表。

    var UserTimeLineNews = (from l in _newsService.NewsQuery()
                                where l.UserId == UserId && l.IsActive == true
                                orderby l.CreateDate descending
                                select new UserTimeLine
                                {
                                    EventDate = l.CreateDate,
                                    CreateDate = l.CreateDate,
                                    NewsId = l.NewsId,
                                    TimeLineType = TimeLineType.CreateNews,
                                    Title = l.Title,
                                    Abstract = l.NewsAbstract,
                                    CommentCount = l.CommentCount,
                                    LikeCount = l.LikeCount,
                                    ViewsCount = l.ViewsCount,
                                    Storyteller = l.Storyteller
                                }).AsQueryable();//Take(NumberOfNews).ToList();

        var UserTimeLineLikeNews = (from l in _likeNewsService.LikeNewsQueryable()
                                    where l.UserId == UserId
                                    orderby l.CreateDate descending
                                    select new UserTimeLine
                                    {
                                        EventDate = l.CreateDate,
                                        CreateDate = l.CreateDate,
                                        NewsId = l.NewsId,
                                        TimeLineType = TimeLineType.LikeNews,
                                        Title = l.News.Title,
                                        Abstract = l.News.NewsAbstract,
                                        CommentCount = l.News.CommentCount,
                                        LikeCount = l.News.LikeCount,
                                        ViewsCount = l.News.ViewsCount,
                                        Storyteller = l.News.Storyteller
                                    }).AsQueryable();//Take(NumberOfNews).ToList();

        var UserTimeLineComments = (from l in _commentService.CommentQueryable()
                                    where l.UserId == UserId && l.IsActive == true
                                    orderby l.CreateDate descending
                                    select new UserTimeLine
                                    {
                                        EventDate = l.CreateDate,
                                        CreateDate = l.CreateDate,
                                        NewsId = l.NewsId,
                                        TimeLineType = TimeLineType.Comment,
                                        Title = l.News.Title,
                                        Abstract = l.News.NewsAbstract,
                                        CommentContent = l.Content,
                                        CommentCount = l.News.CommentCount,
                                        LikeCount = l.News.LikeCount,
                                        ViewsCount = l.News.ViewsCount,
                                        Storyteller = l.News.Storyteller
                                    }).AsQueryable();//Take(NumberOfNews).ToList();

        var item = (UserTimeLineNews
            .Union(UserTimeLineLikeNews)
            .Union(UserTimeLineComments))
            .OrderByDescending(e => e.EventDate)
            .Distinct()
            .Take(NumberOfNews)
            .ToList();

运行后出现以下错误

错误: “UserTimeLine”类型出现在单个LINQ to Entities查询中的两个结构不兼容的初始化中。 可以在同一查询中的两个位置初始化类型,但前提是在两个位置都设置了相同的属性,并且这些属性的设置顺序相同。

1 个答案:

答案 0 :(得分:1)

前两个查询不初始化CommentContent属性。在前两个查询中将其添加到初始化程序中(或在上一个查询中将其删除),最终查询应该有效。