我有两个LINQ表达式,我认为应该能够将它们合并成一个。
我有一个引用了多个项的引荐者列表,我正在尝试确定最受欢迎的项目。每个引荐者向所参考的项目传递唯一的投票分数。也就是说,引荐者1可能会给出0.2的得票,而引荐者2可能会给出0.03的得票。
一个简化的Referrer类:
现在,我可以使用第二个表达式进行分组、求和和排序:
我有一个引用了多个项的引荐者列表,我正在尝试确定最受欢迎的项目。每个引荐者向所参考的项目传递唯一的投票分数。也就是说,引荐者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 };
但这并不与我已有的不同,只是将第一个表达式嵌套在第二个表达式内。是否有另一种方法将这两个表达式合并为一个?