मुझे इस SQLकथन को किसी Linq-Entityक्वेरी में अनुवादित करने की आवश्यकता है ...
SELECT name, count(name) FROM people
GROUP by name
मुझे इस SQLकथन को किसी Linq-Entityक्वेरी में अनुवादित करने की आवश्यकता है ...
SELECT name, count(name) FROM people
GROUP by name
जवाबों:
लेकिन हमेशा संदेश के लिए कंसोल / लॉग में देखें। यदि आप एक सूचना देखते हैं कि आपकी क्वेरी को SQL में परिवर्तित नहीं किया जा सकता है और इसका स्थानीय स्तर पर मूल्यांकन किया जाएगा तो आपको इसे फिर से लिखने की आवश्यकता हो सकती है।
एंटिटी फ्रेमवर्क 7 (अब नाम बदलकर एंटिटी फ्रेमवर्क कोर 1.0 / 2.0 ) अभी तक GroupBy()अनुवाद के लिए समर्थन नहीं करता हैGROUP BY उत्पन्न SQL में (यहां तक कि अंतिम 1.0 रिलीज में यह नहीं होगा)। कोई भी समूहीकरण तर्क क्लाइंट की तरफ चलेगा, जिससे बहुत अधिक डेटा लोड हो सकता है।
आखिरकार इस तरह लिखा कोड ग्रुप बीवाई का उपयोग करना स्वचालित रूप से शुरू कर देगा, लेकिन अब आपके लिए बहुत सावधानी बरतने की आवश्यकता है यदि आपके पूरे अन-ग्रुपेड डेटासेट को मेमोरी में लोड करने से प्रदर्शन समस्याएँ पैदा होंगी।
परिदृश्यों के लिए जहां यह एक सौदा-ब्रेकर है, आपको हाथ से एसक्यूएल लिखना होगा और इसे ईएफ के माध्यम से निष्पादित करना होगा।
यदि संदेह में, एसकेएल प्रोफाइलर को आग लगा दी जाए और देखें कि क्या उत्पन्न होता है - जो आपको वैसे भी करना चाहिए।
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
Dictionaryफास्ट लुकअप (जैसे लूप में) के लिए परिणाम एकत्र करना एक उपयोगी विस्तार है :
var resultDict = _dbContext.Projects
.Where(p => p.Status == ProjectStatus.Active)
.GroupBy(f => f.Country)
.Select(g => new { country = g.Key, count = g.Count() })
.ToDictionary(k => k.country, i => i.count);
मूल रूप से यहां पाया गया: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
यहाँ .net core 2.1 द्वारा समूह का एक सरल उदाहरण है
var query = this.DbContext.Notifications.
Where(n=> n.Sent == false).
GroupBy(n => new { n.AppUserId })
.Select(g => new { AppUserId = g.Key, Count = g.Count() });
var query2 = from n in this.DbContext.Notifications
where n.Sent == false
group n by n.AppUserId into g
select new { id = g.Key, Count = g.Count()};
जिसका अनुवाद है:
SELECT [n].[AppUserId], COUNT(*) AS [Count]
FROM [Notifications] AS [n]
WHERE [n].[Sent] = 0
GROUP BY [n].[AppUserId]