আমি জানি এটি একটি পুরানো প্রশ্ন এবং স্বীকৃত উত্তরটি কাজ করে, তবে এই প্রশ্নটি আমার প্রশ্নের উত্তর দিয়েছে যে এই ধরনের খালি সেটটি ব্যতিক্রম বা ফলাফলের ফলস্বরূপ হবে কিনা default(int)।
গৃহীত উত্তরটি যদিও এটি কাজ করে, আদর্শ সমাধান আইএমএইচও নয়, যা এখানে দেওয়া হয়নি। যে কেউ এটি সন্ধান করছে তার সুবিধার জন্য আমি এটি আমার নিজের উত্তরে সরবরাহ করছি।
ওপির মূল কোডটি ছিল:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max(x => x.ShoeSize);
ব্যতিক্রমগুলি রোধ করতে এবং একটি ডিফল্ট ফলাফল সরবরাহ করার জন্য আমি এটি এইভাবে লিখব:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max(x => x.ShoeSize as int?) ?? 0;
এটি Maxফাংশনটির রিটার্নের ধরণের কারণ হয়ে যায় int?, যা nullফলাফলকে অনুমতি দেয় এবং তারপরে ফলাফলটি ??প্রতিস্থাপন করে । null0
সম্পাদনা
করুন মন্তব্য থেকে কিছু স্পষ্ট করার জন্য, সত্তা ফ্রেমওয়ার্ক বর্তমানে asকীওয়ার্ডটি সমর্থন করে না , সুতরাং EF এর সাথে কাজ করার সময় এটি লেখার উপায়টি হ'ল:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max<[TypeOfWorkers], int?>(x => x.ShoeSize) ?? 0;
যেহেতু এটি [TypeOfWorkers]একটি দীর্ঘ শ্রেণীর নাম হতে পারে এবং লেখার জন্য ক্লান্তিকর তাই আমি সাহায্য করার জন্য একটি এক্সটেনশন পদ্ধতি যুক্ত করেছি।
public static int MaxOrDefault<T>(this IQueryable<T> source, Expression<Func<T, int?>> selector, int nullValue = 0)
{
return source.Max(selector) ?? nullValue;
}
এটি কেবলমাত্র হ্যান্ডলগুলি int, কিন্তু একই জন্য করা যেতে পারে long, double, বা অন্য কোন মান ধরনের প্রয়োজন। এই এক্সটেনশন পদ্ধতিটি ব্যবহার করা খুব সহজ, আপনি কেবলমাত্র আপনার নির্বাচক কার্যক্রমে পাস করেন এবং নালার জন্য বিকল্প হিসাবে ব্যবহার করার জন্য একটি মান অন্তর্ভুক্ত করেন যা ডিফল্ট 0 হয় So সুতরাং উপরেরটি এটির মতো আবারও লেখা যেতে পারে:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).MaxOrDefault(x => x.ShoeSize);
আশা করি এটি আরও বেশি লোককে সহায়তা করে।