এসকিউএল থেকে সত্তা ফ্রেমওয়ার্ক গণনা গ্রুপ-অনুসারে


উত্তর:


181

অনুসন্ধান বাক্য গঠন

var query = from p in context.People
            group p by p.name into g
            select new
            {
              name = g.Key,
              count = g.Count()
            };

পদ্ধতি সিনট্যাক্স

var query = context.People
                   .GroupBy(p => p.name)
                   .Select(g => new { name = g.Key, count = g.Count() });

22

সম্পাদনা করুন: EF কোর ২.১ শেষ পর্যন্ত গ্রুপবাই সমর্থন করে

তবে সর্বদা বার্তাগুলির জন্য কনসোল / লগতে সন্ধান করুন। আপনি যদি এমন কোনও বিজ্ঞপ্তি দেখতে পান যে আপনার ক্যোয়ারী এসকিউএলে রূপান্তরিত হতে পারে না এবং স্থানীয়ভাবে মূল্যায়ন করা হয় তবে আপনার এটি পুনরায় লেখার প্রয়োজন হতে পারে।


সত্তা ফ্রেমওয়ার্ক ((এখন সত্তা ফ্রেমওয়ার্ক কোর ১.০ / ২.০ নামে নতুন নামকরণ করা হয়েছে ) উত্পাদিত এসকিউএলে GroupBy()অনুবাদ করার জন্য এখনও সমর্থন করে না GROUP BY(এমনকি চূড়ান্ত ১.০ রিলিজে এটি হবে না)। যে কোনও গ্রুপিং যুক্তি ক্লায়েন্টের পক্ষ থেকে চলবে, যার ফলে প্রচুর ডেটা লোড হতে পারে।

অবশেষে এর মতো লিখিত কোড স্বয়ংক্রিয়ভাবে গ্রুপের মাধ্যমে গ্রুপ ব্যবহার শুরু করবে, তবে আপাতত আপনার খুব সতর্ক হওয়া দরকার যদি আপনার সম্পূর্ণ গোষ্ঠীবিহীন ডেটাসেটকে মেমরিতে লোড করা পারফরম্যান্সের সমস্যার কারণ হয়ে দাঁড়ায়।

দৃশ্যের জন্য যেখানে এটি একটি চুক্তি-বিভক্তকারী আপনাকে নিজের হাতে এসকিউএল লিখতে হবে এবং EF এর মাধ্যমে এটি চালিত করতে হবে।

সন্দেহের ভিত্তিতে যদি এসকিএল প্রোফাইলার ফায়ার করে এবং কী উত্পন্ন হয় তা দেখুন - যা সম্ভবত আপনার করা উচিত।

https://blogs.msdn.microsoft.com/dotnet/2016/05/16/annoucing-entity-framework-core-rc2


4
মাথা আপ জন্য ধন্যবাদ
জ্যাকব স্ট্যাম

4
এছাড়াও 1.1 তে কোনও গ্রুপিং নেই
সাইমন_উইভার

4
বা 1.2 বা 2.0। আমি ছেড়ে দিয়েছি
সাইমন_উইভার

4
এটি 2.1
Yush0

এটি বিভ্রান্তিকর হতে পারে, আমি মনে করি আপনার উত্তর আপডেট করা এবং স্পষ্টভাবে উল্লেখ করা জরুরী যে EF 7 এর আগে EF সংস্করণগুলি গ্রুপিং সমর্থন করে। এই উত্তরটি যা ওপি প্রশ্নের প্রকৃত উত্তরের চেয়ে একটি মন্তব্যের বেশি তা নিজেই পড়লে বিভ্রান্তিমূলক হয় (এবং ওপিটির উত্তর হিসাবে ব্যাখ্যা করা হয় যা নয়)। এটি পড়ার সময়, কেউ ভুল ধারণা পেতে পারে যেমন ইএফ 7 এমনকি গ্রুপিং সমর্থন করে না এবং সম্ভবত পূর্ববর্তী সংস্করণগুলি এটি সমর্থন করে না যা ঠিক সত্য নয়।
জন্ম

14

একটি 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


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]

0

EF 6.2 এর সাথে এটি আমার পক্ষে কাজ করেছিল

  var query = context.People
               .GroupBy(p => new {p.name})
               .Select(g => new { name = g.Key.name, count = g.Count() });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.