2011-04-12 6 views
6

मैं एक मौजूदा परियोजना को परिवर्तित करने और निम्नलिखित vb LINQ कोड परिवर्तित अटक रहा द्वारा अपने आप को पढ़ाने सी # करने की प्रक्रिया में हूँ करने के लिए वीबी Linq परिवर्तित:सी #

Dim outStuff = From tt In (From t In Products.SelectMany(Function(p) If(p.tags IsNot Nothing, p.tags, New ObservableCollection(Of TagModel))) 
       Group By tagName = t.name, 
            v = (Aggregate p In Products Where If(p.tags IsNot Nothing, p.tags.Contains(t), Nothing) Into Sum(p.views)), 
            nl = (Aggregate p In Products Where If(p.tags IsNot Nothing, p.tags.Contains(t), Nothing) Into Sum(p.num_likes)) 
       Into g = Group, Count()) 
       Group By name = tt.tagName Into Count = Sum(tt.Count), viewsTotal = Sum(tt.v), num_likesTotal = Sum(tt.nl) 
       Select name, Count, viewsTotal, num_likesTotal 

जहां Products As ObservableCollection(Of ProductModel)

मैं mananged गए इतना अब तक परिवर्तित करने के लिए:

var x = Products.SelectMany(p => (p.tags != null) ? p.tags : new ObservableCollection<TagModel>()); 
var tags = from t in x group t by t.name into g select new { tagname=g.First().name}; 

'समूह के आधार पर मुझे स्टम्प्ड गया है। किसी भी मदद बहुत अच्छा होगा ...

+0

यदि यह किसी की सहायता करता है, तो यह प्रोजेक्ट है कि कोड उस से संबंधित है जिसे मैं कनवर्ट करने और पृष्ठ में जोड़ने की कोशिश कर रहा हूं: http: // www .codeproject.com/KB/Silverlight/ListDragDropSL.aspx – Graeme

उत्तर

0

आपका कोड लग रहा है एक छोटे से पागल :) ... यह समझने के लिए क्या आप वास्तव में चाहते हैं कठिन है, लेकिन मुझे लगता है कि यह यह है:

var outStuff = Products.SelectMany(p => p.tags) 
    .Where(t => t != null) 
    .GroupBy(t => t.name) 
    .Select(g => new 
    { 
     Name = g.Key, 
     Count = g.Sum(), 
     ViewsTotal = g.Sum(x => x.v), 
     LikesTotal = g.Sum(x => x.nl), 
    }); 
1

आपकी क्वेरी में है थोड़ा कट्टरपंथी और पालन करना मुश्किल है, लेकिन मुझे जो वर्णन करना है, उसका वर्णन करने की कोशिश करें। आपके पास उत्पादों की एक सूची है, जिनमें से प्रत्येक में एक या अधिक टैग हो सकते हैं; और आप टैग के कितने उत्पादों की संख्या, उस टैग के साथ उत्पादों के विचारों की कुल संख्या और उस टैग के साथ उत्पाद की "पसंद" की कुल संख्या के साथ सभी टैग की एक सूची चाहते हैं। यदि ऐसा है, तो निम्नलिखित चाल चलाना चाहिए:

// may want to add ToArray() here so that filter is not executed multiple times during subsequent query 
var productsWithTags = Products.Where(p => p.tags != null); 
var outStuff = from t in (from p in productsWithTags 
       from t in p.tags 
       select t).Distinct() 
       let matchingProducts = productsWithTags.Where(p => p.tags.Contains(t)) 
       select new { name = t.name, 
          Count = matchingProducts.Count(), 
          viewsTotal = matchingProducts.Sum(p => p.views), 
          num_likesTotal = matchingProducts.Sum(p => p.num_likes) 
          };