-1

別のテーブルの上位 5 つの値に基づいてデータベースからテーブルを選択しようとしていますが、障害が発生しました。

上位 5 つの値を除いたバージョンは次のとおりです。

from d in Deals
from f in FacebookUserCategories
from s in SubCategories
where s.FacebookCategoryId == f.FacebookCategoryId
&& f.FacebookUserId == 1437585390
orderby f.Count descending
select d

ただし、SubCategories テーブルの上位 5 つの ID に基づいて取引を選択する必要があるため、Take オペレーターを使用する必要があります。

以下のlinqは、これを達成するのに役立ちます:

(from f in FacebookUserCategories
 from s in SubCategories
 where s.FacebookCategoryId == f.FacebookCategoryId
 orderby f.Count descending
 select s.Id).Take(5)

ここから結合として SubCategoryId を持つ取引テーブルを選択する方法はありますか?

要約すると...私はSQLを書くことができました..それは次のようになります:

SELECT t1.* FROM Deal t1
INNER JOIN (
SELECT TOP 5 t2.Id FROM FacebookUserCategory , SubCategory t2
WHERE FacebookUserId = '1437585390'
AND FacebookUserCategory.FacebookCategoryId = t2.FacebookCategoryId 
ORDER BY Count DESC) tbl
ON t1.SubCategoryId = tbl.Id
4

1 に答える 1

1

これを試してみてください. Join3 つのテーブルすべてに使用します. Join2 つのテーブルだけに使用Joinします. 3 つ目のテーブルにも使用しないでください.

var result = from d in deals
             let top5Counts =
            (from f in FacebookUserCategories
             join s in SubCategories on f.FacebookCategoryId equals s.FacebookCategoryId
             where f.FacebookUserId == 1437585390
             orderby f.Count descending
             select s.Id).Take(5)
            where top5Counts.Contains(d.SubCategoryId.Value)
            select d;
于 2012-11-15T14:22:44.023 に答える