我是linq的新手,我需要一定的加入。因此,对于我想要与Linq加入的某些页面,我有两个表,类似于
UserFavorites 表格:
Page.id
userClickCount
页面表格:
id
everyoneClickCount
用户收藏是在点击或收藏时创建的,因此只有一定数量的链接。我想显示两个表中的所有结果,按用户点击次数排序,然后大多数人点击。
我现在有这个,但是按照每个人的数量排序。
pages = (from page in context.Page
join ps in
(from favs in context.UserFavorites
select favs) on page.Id equals ps.Page.Id into temp
from t in temp.DefaultIfEmpty()
orderby t.userClickCount descending, t.Page.everyoneClickCount descending, t.Page.PageName ascending
select dash).ToList();
我只是不确定从哪里开始。
答案 0 :(得分:0)
试试这个:
var pages = context.Pages.Select(page => new {
PageData = page,
Favs = page.UserFavorites
})
.OrderByDescending(page => (page.Fav.Sum(userClickCount))
.ThenBy(page => page.PageData.everyoneClickCount)
.ThenBy(page => page.PageData.Name)
.ToList();
请注意,这将按所有用户点击次数的总和排序。如果您只想要当前用户,请将该行替换为.OrderByDescending(page => (page.Fav.Where(u => u.userID == userid).Sum(userClickCount))
答案 1 :(得分:-3)
对于复杂的连接,我建议编写一个存储过程,然后使用EF和linq来调用此SP。