2010-06-23 14 views

उत्तर

39

क्वेरी निरंतरता (का चयन करें ... में और समूह ... में है, लेकिन नहीं में शामिल होने के ... में) बस क्वेरी अभिव्यक्ति अप बंटवारे के बराबर हैं। एक बार जब आप बाहर क्या काम

var tmp = myCollection.GroupBy(x => x.Id) 
         .Select(y => new { 
           Id = y.Key, 
           Quantity = y.Sum(x => x.Quantity) 
           }); 

:

var tmp = from x in myCollection 
      group x by x.Id; 
var result = from y in tmp 
      select new { 
       Id = y.Key, 
       Quantity = y.Sum(x => x.Quantity) 
      }; 

बदलें डॉट नोटेशन में उन:

var tmp = myCollection.GroupBy(x => x.Id); 
var result = tmp.Select(y => new { 
       Id = y.Key, 
       Quantity = y.Sum(x => x.Quantity) 
      }); 

तो फिर तुम उन्हें वापस जोड़ सकता तो मैं अपने उदाहरण के बारे में सोच के रूप में की तरह सी # कंपाइलर क्वेरी अभिव्यक्तियों के साथ करता है, बाकी अपेक्षाकृत सरल है :)

5
myCollection 
    .GroupBy(x => x.Id) 
    .Select(x => 
     new 
     { 
      Id = x.Key, 
      Quantity = x.Sum(y => x.Quantity 
     }); 
7
myCollection.GroupBy(x => x.Id) 
      .Select(y => new { 
           Id = y.Key, 
           Quantity = y.Sum(x => x.Quantity) 
          }); 
1
 var mostFrequent = 
      lstIn.Where(i => !string.IsNullOrEmpty(i)) 
       .GroupBy(s => s) 
       .OrderByDescending(g => g.Count()) 
       .Select(s => s.Key) 
       .FirstOrDefault(); 
+3

आपको यह बताते हुए कुछ पाठ जोड़ना चाहिए कि यह उत्तर क्या करता है और यह विशिष्ट समस्या का समाधान क्यों प्रदान करता है। कोड डंप शायद ही कभी अन्य लोगों के लिए उपयोग किया जाता है। –

-1

तो, यहां अधिकांश उत्तरों के लिए, हर कोई समूह की गिनती से बने आईडी की एक साधारण वस्तु प्राप्त करने के साथ काम कर रहा है, और कुंजी स्वयं समूह है। के।

हालांकि यह शायद इसका मुख्य उपयोग है। वास्तव में मेरी जरूरतों को पूरा नहीं किया था।

मेरे अपने मामले के लिए, मैं मूल रूप से कुछ ऑब्जेक्ट संपत्ति द्वारा समूह करना चाहता था, फिर उस समूह से एक विशिष्ट वस्तु प्राप्त करना चाहता था। यहां एक नमूना कोड है।

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine("Hello World"); 
     var response = new List<ResponseClass>(); 
      var listOfStudents = new List<Student>(); 
      // Insert some objects into listOfStudents object. 
      listOfStudents.GroupBy(g => g.Class).ToList() 
       .ForEach(g => response.Add(g.OrderByDescending(s => s.CreatedOn).Select(a => 
       new ResponseClass 
       { 
        SName = a.StudentName, 
        SAge = a.Age, 
        SClass = a.Class, 
        SCreatedOn = a.CreatedOn, 
        RandomProperty = Guid.NewGuid().ToString() 
       }) 
       .First())); 

       Console.WriteLine("This compiles and should work just fine"); 
    } 
    class Student 
    { 
     public string StudentName { get; set; } 
     public int Age { get; set; } 
     public string Class { get; set; } 
     public DateTime CreatedOn { get; set; } 
    } 

    class ResponseClass 
    { 
     public string SName { get; set; } 
     public int SAge { get; set; } 
     public string SClass { get; set; } 
     public DateTime SCreatedOn { get; set; } 
     public string RandomProperty { get; set; } 
    } 
} 

आप बल्कि एक foreach पाश का प्रयोग करेंगे तो (मैं लैम्ब्डा के रूप में मुझे लगता है यह आसान को पढ़ने के लिए पसंद करते हैं), लेकिन यदि आप करते हैं, आप यह बहुत की तरह कर सकता है।

उम्मीद है कि यह किसी की सहायता करेगा। :)

संबंधित मुद्दे