0

我能够为 Web Api 编写此代码。在这段代码中,我编写了两个查询,并结合了评论和关注者数据应该根据 ctime 和 startfollowing 的时间合并(而不是合并)的方式。如果用户有新评论,则评论应在前,如果关注者在前,则关注者数据应在前。

 public IQueryable<Object> GetCommentsandFollowActivityCommnets()
    {

        var combo1 = from c in db.comments
                    join p in db.picturedetails on c.targetpictureid equals p.idpictures
                    join u in db.users on c.iduser equals u.iduser
                    select new TCommentDTO
                    {

                        idcomments=c.idcomments,
                        comment1 = c.comment1,
                        targetpictureid = c.targetpictureid,
                        ctime = c.ctime,
                        iduofpic=p.iduser,
                        iduofcommentor=c.iduser,
                        profilepicofcommentor=u.profilepic,
                        usernameofcommentor=u.username,
                        picFilename=p.picFilename,
                        picTitle=p.picTitle

                    };

      var combo2=  from f in db.followers
                    join u in db.users on f.iduser equals u.iduser
                    select new TfollowerDTO
                    {    
                        idfollowers=f.idfollowers,
                        iduser=f.iduser,
                        targetiduser=f.targetiduser,
                        startedfollowing=f.startedfollowing,
                        unoffollower=u.username,
                        ppoffollower=u.profilepic,
                        status=u.status


                    };
          var result1 = from c in combo1
          select new UserTimeLineDTO
          { SortKey = c.ctime, Member =c};

          var result2 = from c in combo2
          select new UserTimeLineDTO{ SortKey = c.startedfollowing, Member = c };

            var result = result1.Concat(result2).OrderBy(x =>x.SortKey).Select(x => x.Member);

            return result; 

    }

该代码没有给出任何编译时错误。它在编译器中运行良好,但在运行时出现异常:

DbUnionAllExpression requires arguments with compatible collection ResultTypes.

如何删除此异常?

4

1 回答 1

1

作为一种解决方法,我会尝试评估内存中的最后一个表达式:

      var result1 = (from c in combo1
      select new UserTimeLineDTO
      { SortKey = c.ctime, Member =c}).ToList();

      var result2 = (from c in combo2
      select new UserTimeLineDTO{ SortKey = c.startedfollowing, Member = c }).ToList();

      var result = result1.Concat(result2).OrderBy(x =>x.SortKey).Select(x => x.Member);

联合现在应该成功,以及排序和最终投影。

于 2013-10-31T15:07:29.633 回答