我正在尝试根据另一个表中的前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个Ids选择交易,这意味着我必须使用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
答案 0 :(得分:1)
试试这个,对所有3个表使用Join
,仅使用Join
表示2个表,为什么不在第3个表中使用Join
。
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;