:)
var results =
from kvp in source
group kvp by kvp.Key.ToUpper() into g
select new
{
Group = g,
Max = g.Max(kvp => kvp.Value),
Total = g.Sum(kvp => kvp.Value)
} into ag
from x in ag.Group //SelectMany
where x.Value != ag.Max
//for the update to the question - note: possibly ambiguous
let correct = ag.Group.Where(y => y.Value == ag.Max).First().Key
select new
{
Key = x.Key,
Max = ag.Max,
Total = ag.Total,
Correct = correct
};
Ben biraz çünkü tüm küçük parçaların soru gibi:
Update, aslında ben de maksimum girişten Anahtarına ihtiyacınız cevap vermek için gerekli. nasıl bilmiyorsanız bir grup birden toplamaları Sahne
Max = g.Max(kvp => kvp.Value),
Total = g.Sum(kvp => kvp.Value)
basit, henüz zordur.
select a into b
Bu madde daha önce de her şeyi alır ve hedef ile yeni bir sorgu başlatır. Onsuz ben böyle yeni bir sorgu başlatmak zorundayız:
var A = ... select a
var B = from b in A
O select into
fıkra kapsamından kvp
ve g
kaldırır dikkat etmek önemlidir.
from b in source
from a in b.A //SelectMany
Bu çocuk koleksiyonunun "açma" Bir hakkındaki bir sorguya b hakkındaki Sorgumda döner. Varsayılan Enumerable.SelectMany aşırı yükünden farklı olarak, üsteki (b
) kapsamda bırakır.
where x.Value != ag.Max
ebeveynin özelliğe sahip bir çocuğun mülkü karşılaştırılması? Hoş. Filtrelemek istediğinizde where
'u dağıtmayı unutmamak önemlidir, sadece gruplandırılmış olsanız bile (HAVING
yoktur).
Ev ödevi gibi kuşkulu bir şekilde geliyor. –
Veya bir görüşme soru ... ödev genellikle "ToUpper" içermeyen –
Ne ahbap, sadece, ben [artık] gerçekten biraz geçmiş ödev :) Ve yanlısı bir kodlayıcı değilim Profilimden görürdük Eğlenmek için :) –