6
我有两个LINQ表达式,我认为我应该能够合并成一个。有没有更好的方法来结合这两个Linq表达式?
我有一个引用列表,每个引用多个项目,我试图确定最流行的项目。每个推荐人都会将一个独特的投票分数传达给参考项目。也就是说,推荐人1可能会投票0.2,推荐人2可能会投票0.03。
简化Referrer
类:
class Referrer
{
public double VoteScore { get; private set; }
public List<int> Items { get; private set; }
public Referrer(double v)
{
VoteScore = v;
Items = new List<int>();
}
}
我的两个LINQ表达式是:
var Votes =
from r in Referrers
from v in r.Items
select new { ItemNo = v, Vote = r.VoteScore };
这给了我一个清单:
ItemNo:1, Vote:0.2
ItemNo:3, Vote:0.2
ItemNo:1, Vote:0.03
现在,我可以分组,汇总并用我的第二个表达式排序:
var SortedByScore =
from v in Votes
group v by v.ItemNo into g
let score = g.Sum((v) => v.Vote)
orderby score descending
select new { ItemNo = g.Key, Score = score };
是否可以将这些组合成一个表达式?我知道我可以链中的表现,那就是:
var SortedByScore =
from v in
(from r in ActivatedReferrers
from v in r.Items
select new { ItemNo = v, Vote = r.VoteScore })
group v by v.ItemNo into g
let score = g.Sum((v) => v.Vote)
orderby score descending
select new { ItemNo = g.Key, Score = score };
但是,这并不是真正的从我已经有任何不同 - 它只是嵌套第二里面的第一个表达式。有没有另一种方法将这两个表达式合并为一个?
看起来像一个奇怪的模型给我。 “引用者”给出了其项目列表中每个项目的相同投票分数?我很想知道你在建模什么。 – Pedro 2011-01-26 19:46:41
想想PageRank是如何工作的。这不是我正在建造的,但这个想法是相似的。基本上,每个推荐人得分为1.0,并且该分数均匀地分布在所有列表中。该模型很简单,但对我所做的事情有效。 – 2011-01-26 20:16:41