我有这个查询,计算用户在我们网站上的总数+:
return db.tblGPlusOneClicks
.Where(c =>
c.UserID == UserID
&& c.IsOn
)
.Select(c=>c.URLID)
.Distinct()
.Count();
数据源自此表:
简单计算不同的网址,其中IsOn = true
将显示他们拥有的网页数量+1。但是,通过将IsOn
中的值存储为false,该表还会存储非加1的内容。
如果我:
在我们的查询中,不应将此计为该用户的加号,因为此用户的此URL的最后一个操作是取消加1。同样,如果我:
它应该在原始查询中计算,因为该URL的最后一个操作是加1。
如何修改我的查询以计算IsOn
为true
的实例,这是该用户对该网址的最后一次已知操作?我正在努力编写一个执行此操作的查询。
答案 0 :(得分:4)
试试这个:
return db.tblGPlusOneClicks
.Where(c => c.UserID == UserID)
.GroupBy(c => c.URLID)
.Count(g => g.OrderByDescending(c => c.Date).First().IsOn);
答案 1 :(得分:2)
听起来你可以这样做:
return (from c in db.tblGPlusOneClicks
where c.UserID == UserID
group c by c.URLID into g
where g.OrderByDescending(x => x.Date).First().IsOn
select g.Key).Distinct().Count();
答案 2 :(得分:1)
不假设up / downvotes的余额可能是:
return db.tblGPlusOneClicks
.Where(c => c.UserID == UserID)
.GroupBy(c=>c.URLID)
.Select(g => new {
URLID = g.Key,
VoteBalance = g.Aggregate(0, (a,i) => a+(i.IsOn?1:-1))
})
.Sum(u => u.VoteBalance);
这会考虑所有以前的投票,而不是只看最新的记录。当然,这取决于你,你喜欢什么。