Есть ли лучший способ объединить эти два выражения Linq?

У меня есть два выражения 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 };

Но на самом деле это не отличается от того, что у меня уже есть - это просто вложение первого выражения во второе. Есть ли другой способ объединить два выражения в одно?

6
задан Jim Mischel 26 January 2011 в 19:22
поделиться