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


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.