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