さて、ユーザーが評価できる (スコアを付ける) 場所がたくさんあります。場所を取得するとき、その場所を評価した友人の数も知りたいです。ユーザーはリクエストを送信することで友達になります。
FRIENDREQID -- ID of user that sent the request.
FRIENDRESPID -- ID of user that got the request
STATUS -- Status of the request. (Accepted / Pending)
このクエリは仕事をします。
select
p.*,
(
select
count(*)
from
UserRatings ur,
Friends f
where
ur.PlaceId = p.PlaceId
and (ur.UserId = f.FriendReqId and f.FriendRespId = @myUserId )
or (ur.UserId = f.FriendRespId and f.FriendReqId = @myUserId )
and f.Status = 'A'
) as FriendCount
from
Places p
私はエンティティへのlinqで相互クエリを考え出すのに本当に苦労し(私は初心者です)、これを思いつきました。
var result = (from p in db.Places
select new PlaceDTO
{
PlaceId = p.PlaceId,
FriendRatingCount = (from f in db.Friends
from ur in db.UserRatings
where ur.PlaceId == p.PlaceId &&
(ur.UserId == f.FriendReqId && f.FriendRespId == argUserId) ||
(ur.UserId == f.FriendRespId && f.FriendReqId == argUserId) &&
f.Status == "A"
select f).Count()
})
このクエリを少しかさばらせるのは、私のフレンド システム モデルですか? より効率的で読みやすくするために行うことができる承認のヒントはありますか?