আমি লিনকিউ কোয়েরিতে গ্রুপের সাহায্যে কীভাবে ম্যাক্স সারি পাব?


96

অনুসরণ করা এসকিউএল ক্যোয়ারির সাথে মেলে আমি লিনকিউতে একটি উপায় খুঁজছি।

Select max(uid) as uid, Serial_Number from Table Group BY Serial_Number

সত্যিই এটির জন্য কিছু সহায়তা খুঁজছেন। Group Byসিনট্যাক্সের কারণে উপরের ক্যোয়ারী প্রতিটি ক্রমিক সংখ্যার সর্বোচ্চ uid পায় ।

উত্তর:


94
        using (DataContext dc = new DataContext())
        {
            var q = from t in dc.TableTests
                    group t by t.SerialNumber
                        into g
                        select new
                        {
                            SerialNumber = g.Key,
                            uid = (from t2 in g select t2.uid).Max()
                        };
        }

4
আমি উভয়কেই উত্তর হিসাবে গ্রহণ করতে চাই, তবে আমি অনুমান করি যে আমি এটি করতে পারি না তাই আমি আপনাকে উভয়কেই ভোট দিয়েছি। ধন্যবাদ অনেক বার !!!
— SpoiledTechie.com

70
var q = from s in db.Serials
        group s by s.Serial_Number into g
        select new {Serial_Number = g.Key, MaxUid = g.Max(s => s.uid) }

আমি উভয়কেই উত্তর হিসাবে গ্রহণ করতে চাই, তবে আমি অনুমান করি যে আমি এটি করতে পারি না তাই আমি আপনাকে উভয়কেই ভোট দিয়েছি। ধন্যবাদ অনেক বার !!!
— SpoiledTechie.com 15

আরও মনে রাখবেন যে ম্যাক্স ফাংশনে ল্যাবডা এক্সপ্রেশনের জন্য পরিবর্তনশীল যে কোনও কিছু হতে পারে (s => s.uid, tv => tv.uid ,্যাসেডিএফ = >্যাসিডেফ.ইইডি)। লিনাক স্বয়ংক্রিয়ভাবে এটি সিরিয়াল প্রকারের উপাদানগুলির নির্বাচন করে স্বীকৃত হবে।
— মাইকেল

31

পদ্ধতিতে চেইন ফর্ম:

db.Serials.GroupBy(i => i.Serial_Number).Select(g => new
    {
        Serial_Number = g.Key,
        uid = g.Max(row => row.uid)
    });

23

আমি লিনকপ্যাডে ডামিয়েনজির উত্তরটি পরীক্ষা করেছি। পরিবর্তে

g.Group.Max(s => s.uid)

হতে হবে

g.Max(s => s.uid)

ধন্যবাদ!


10
এটি সম্ভবত ড্যামিয়েনজির উত্তর সম্পর্কে একটি মন্তব্য করা উচিত।
— সি

11

উত্তরগুলি ঠিক আছে যদি আপনার কেবলমাত্র দুটি ক্ষেত্রের প্রয়োজন হয় তবে আরও জটিল বস্তুর জন্য সম্ভবত এই পদ্ধতিটি কার্যকর হতে পারে:

from x in db.Serials 
group x by x.Serial_Number into g 
orderby g.Key 
select g.OrderByDescending(z => z.uid)
.FirstOrDefault()

... এটি "নতুন নির্বাচন করুন" এড়াতে পারবেন


আমি এটি পছন্দ করি - আপনি কি জানেন যে এটি অন্যান্য উত্তরগুলির মতো দক্ষ?
— noelicus

আপনি কোয়েরি সিনট্যাক্সটি এখানে শেষ অবধি ব্যবহার করেছেন, যেখানে আপনি পদ্ধতি সিনট্যাক্সে স্যুইচ করেছেন। আপনার কি ছিল? আপনার সমাধানের জন্য একটি সম্পূর্ণ ক্যোয়ারী সিনট্যাক্স ফর্ম?
— শেঠ

0

এটি লিনকো ল্যামডা এক্সপ্রেশনে গ্রুপবাই এবং সিলেক্টম্যান ব্যবহার করে করা যেতে পারে

var groupByMax = list.GroupBy(x=>x.item1).SelectMany(y=>y.Where(z=>z.item2 == y.Max(i=>i.item2)));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.