0

Web API 用にこのコードを書くことができます。このコードでは、2 つのクエリを記述し、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 に答える