-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 作为连接的 Deals 表?

只是回顾一下......我可以编写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

试试这个,Join用于所有 3 张桌子,您Join只用于 2 张桌子,为什么不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 回答