У меня есть два выражения LINQ, которые, как мне кажется, можно объединить в одно.
У меня есть список источников перехода, каждый из которых ссылается на несколько элементов, и я пытаюсь определить самые популярные элементы. Каждый реферер передает уникальный счет голосов элементу, на который делается ссылка. То есть реферер 1 может дать голос 0,2, а реферер 2 может дать голос 0,03.
Упрощенный класс реферер
:
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 };
Но на самом деле это не отличается от того, что у меня уже есть - это просто вложение первого выражения во второе. Есть ли другой способ объединить два выражения в одно?