2009-04-18 13 views
31

मेरे पास डेटाटाइम फ़ील्ड वाला एक टेबल है। मैं महीने/वर्ष संयोजन द्वारा समूहीकृत परिणाम सेट और उस महीने/वर्ष के भीतर दिखाई देने वाले रिकॉर्ड की संख्या पुनर्प्राप्त करना चाहता हूं। LINQ में यह कैसे किया जा सकता है?LINQ: डेटाटाइम फ़ील्ड के भीतर महीने और वर्ष के अनुसार समूह

निकटतम मैं यह पता लगाने की कर लिया है TSQL में है:

select substring(mo,charindex(mo,'/'),50) from (
select mo=convert(varchar(2),month(created)) + '/' + convert(varchar(4), year(created)) 
,qty=count(convert(varchar(2),month(created)) + '/' + convert(varchar(4), year(created))) 
from posts 
group by convert(varchar(2),month(created)) + '/' + convert(varchar(4), year(created)) 
) a 
order by substring(mo,charindex(mo,'/')+1,50) 

लेकिन मैं नहीं कहूँगा कि काम करता है ...

उत्तर

59
var grouped = from p in posts 
    group p by new { month = p.Create.Month,year= p.Create.Year } into d 
    select new { dt = string.Format("{0}/{1}",d.Key.month,d.Key.year), count = d.Count() }; 

यहाँ LINQ में उपलब्ध दिनांक समय कार्यों की सूची दी गई है:

यह बुनियादी वाक्य रचना है। इस कार्य के लिए आप यह भी समझने की multi-column grouping

उतरते आदेश दिया

var grouped = (from p in posts 
    group p by new { month = p.Create.Month,year= p.Create.Year } into d 
    select new { dt = string.Format("{0}/{1}",d.Key.month,d.Key.year), count = d.Count()}).OrderByDescending (g => g.dt); 
+0

मैं इसे महीनों तक क्रमबद्ध करना चाहता हूं जैसे पहले चालू महीने शीर्ष पर और पिछले महीने अगले एनडी पर ?? कृपया –

+0

की सहायता करें, आप ऑर्डरबाइजेंडिंग जोड़कर ऐसा कर सकते हैं – Jeremy

2

This Site एक उदाहरण है कि अपनी जरूरत को भरने चाहिए।

from o in yg 
group o by o.OrderDate.Month into mg 
select new { Month = mg.Key, Orders = mg } 
+6

मल्टीप्ल वर्षों से ऑर्डर वाले एक सूची के साथ, यह जनवरी 2010, 2011 और 2012 से उसी समूह में ऑर्डर समूह करेगा। – Moulde

1

की आवश्यकता होगी आप इसे इस तरह भी कर सकता है

from o in yg 
group o by o.OrderDate.ToString("MMM yyyy") into mg 
select new { Month = mg.Key, Orders = mg } 

आपका परिणाम होगा

{जनवरी 2014 , 25} {फरवरी 2015, 15} आदि ...

7

यह उन लोगों के लिए है जो इसे पूरा करने की कोशिश कर रहे हैं लेकिन लैम्ब्डा अभिव्यक्तियों का उपयोग कर रहे हैं।

मान लीजिए कि आपके पास पहले से ही इकाइयों का संग्रह है और प्रत्येक इकाई में ऑर्डरडेट को इसकी गुणों में से एक है।

yourCollection 
// This will return the list with the most recent date first. 
.OrderByDescending(x => x.OrderDate) 
.GroupBy(x => new {x.OrderDate.Year, x.OrderDate.Month}) 
// Bonus: You can use this on a drop down 
.Select(x => new SelectListItem 
     { 
      Value = string.Format("{0}|{1}", x.Key.Year, x.Key.Month), 
      Text = string.Format("{0}/{1} (Count: {2})", x.Key.Year, x.Key.Month, x.Count()) 
     }) 
.ToList(); 

आप SelectListItem के संग्रह की जरूरत नहीं है तो सिर्फ इस एक के साथ चयन की जगह: यहाँ

.Select(x => string.Format("{0}/{1} (Count: {2})", x.Key.Year, x.Key.Month, x.Count())) 
0

दिनांक समय में समूहीकरण के लिए एक सरल उपाय है।

List<leaveallview> lav = new List<leaveallview>(); 
lav = dbEntity.leaveallviews.Where(m =>m.created==alldate).ToList(); 
dynamic lav1 = lav.GroupBy(m=>m.created.Value.GetDateTimeFormats()).FirstOrDefault().ToList(); 
संबंधित मुद्दे