লিনক ব্যবহার করে বস্তুর তালিকায় মান বিদ্যমান কিনা তা অনুসন্ধান করা হচ্ছে


228

বলুন আমার একটি ক্লাস আছে Customerযার একটি সম্পত্তি আছে FirstName। তারপরে আমার একটি List<Customer>

তালিকাটিতে Firstname = 'John'কোনও একক বিবৃতিতে গ্রাহক রয়েছে কিনা তা খুঁজে পেতে লিনকিউ ব্যবহার করা যেতে পারে .. কীভাবে?

উত্তর:


459

লিনকিউ একটি এক্সটেনশন পদ্ধতি সংজ্ঞা দেয় যা এই সঠিক সমস্যাটি সমাধানের জন্য উপযুক্ত:

using System.Linq;
...
    bool has = list.Any(cus => cus.FirstName == "John");

আপনি System.Core.dll উল্লেখ করেছেন তা নিশ্চিত করুন, যেখানে লিনকু থাকে।


24
যে কোনওটি ভাল, আমি অবাক হই যে কতগুলি বিকাশকারী যখন তাদের কোনও ব্যবহার করা উচিত তখন তারা গণনা ব্যবহার করে?
রিচার্ডড

12
আপনি একটি কেস সংবেদনশীল অনুসন্ধানও করতে পারেন: cus => cus.FirstName.Equals ("জন", স্ট্রিংকম্পায়ারেন্স।ক্র্যানাল কালচারআইগনরেস কেস)
jmservera

1
আমি জানি এটি একটি পুরানো প্রশ্ন তবে কেন আমরা অস্তিত্বের পদ্ধতিটি ব্যবহার করছি না? এটি বিদ্যমান কি না তা দেখার জন্য তৈরি করা হচ্ছে।
914 এ ব্ল্যাক অজানা

6
কারণ সমস্ত সংগ্রহের অস্তিত্ব নেই, এবং এটি ল্যাম্বডা এক্সপ্রেশন গ্রহণ করে না, বরং আমরা যে অবজেক্টটি নিজেরাই সন্ধান করছি।
zvolkov

1
@ জোভোকভ, আমার পুনর্নির্মাণের পরামর্শ দিচ্ছে কেন আমি বুল ব্যবহার করেছি = তালিকা রয়েছে ll সমস্ত (সিএস => কিউস.ফার্সনাম! = "জন"); এটি কি আরও অনুকূল?
গুলু

105

zvolkov এর উত্তর খুঁজে বের করতে নিখুঁত এক যদি এমন একটি গ্রাহক নেই। পরে যদি আপনার গ্রাহকটি ব্যবহার করতে হয় তবে আপনি এটি করতে পারেন:

Customer customer = list.FirstOrDefault(cus => cus.FirstName == "John");
if (customer != null)
{
    // Use customer
}

আমি জানি এই নয় আপনি কি জিজ্ঞাসা করা হয়েছে, কিন্তু আমি চাই অগ্রক্রয়াধিকারবলে কেনা বা পাওয়া একটি ফলো অন প্রশ্ন :) (অবশ্যই, এই শুধুমাত্র খুঁজে বের করে প্রথম এই ধরনের গ্রাহকের ... তাদের সব খুঁজে পেতে, শুধু একটি ব্যবহার সাধারণ whereধারা।)


7
আমি এটি উল্লেখ করব যে ডিবাগিংয়ের পরে আপনি যখন এটি করেছেন তা প্রশংসিত হতে পারেন, যদি আপনি নিজেকে হঠাৎ উত্সাহী মনে করেন কোন গ্রাহকের মানদণ্ডের সাথে মানানসই এটি।
এমকিপিপি

1
এই উত্তরটিকে কেবল একসাথে ঠেলেই আমি SO সম্প্রদায় যেভাবে প্রশ্ন / উত্তরে আরও বেশি যুক্ত করার জন্য অতিরিক্ত পদক্ষেপ নিয়ে চলেছি সেভাবেই ভালবাসি।
বার্নিম্যাক

1
ধন্যবাদ এটি আমাকে সহায়তা করেছিল, তবে কখনও কখনও আমি কেবল boolফলাফল পেতে চাই , তাই সেই ক্ষেত্রে .Anyবা এখানে.FindIndex ব্যবহার করা হয় যা দ্রুত ?
শাইজুত

1
@ স্টম: এগুলি উভয়ই (এন), মূলত ... তারা কেবল লিনিয়ার অনুসন্ধান ches
জন স্কিটি

এই ধাক্কা। আপনি কীভাবে তালিকার সিনট্যাক্সটি ব্যবহার করেন তা পছন্দ করি a তালিকাগুলির পরিবর্তে ফার্স্টআরডিফল্ট W কোথায় () First ফার্স্টআরডিফল্ট।
গানওয়ান্ডারার

25

প্রশ্নে অনুসরণের জন্য একটি বিকল্প (কীভাবে এমন কোনও গ্রাহককে খুঁজে পাবেন যার প্রথম নামগুলির যে কোনও নম্বর থাকতে পারে):

List<string> names = new List<string>{ "John", "Max", "Pete" };
bool has = customers.Any(cus => names.Contains(cus.FirstName));

বা অনুরূপ তালিকার সিএসভি থেকে গ্রাহককে পুনরুদ্ধার করতে

string input = "John,Max,Pete";
List<string> names = input.Split(',').ToList();
customer = customers.FirstOrDefault(cus => names.Contains(cus.FirstName));

10

লিনক ব্যবহার করে আপনার অনেক সম্ভাবনা রয়েছে, এখানে ল্যাম্বডাস ব্যবহার না করেই:

//assuming list is a List<Customer> or something queryable...
var hasJohn = (from customer in list
         where customer.FirstName == "John"
         select customer).Any();

5
customerList.Any(x=>x.Firstname == "John")

এটি "যদি" যেমন এন্ট্রি উপস্থিত থাকে প্রশ্নের উত্তর দেয় না; এটি কেবলমাত্র মানগুলি উপস্থিত থাকলে তা গণনা করে। এই গণনাটি অকার্যকর কিনা তা নির্ধারণ করার জন্য একটি অতিরিক্ত পদক্ষেপের প্রয়োজন।
জেসন

তারপরে যে কোনও জায়গায় পরিবর্তন করুন। আমার জন্য সম্ভবত আরও দার্শনিক। কোনটি সেগুলি যত্ন না করেই আমার খুব কমই জানতে হবে। @ জমিদার: আপনি ঠিক বলেছেন। আমি কিছুক্ষণ আগে লিনকিউ ছেড়ে দিয়েছি এবং এখন ল্যাম্বদা একচেটিয়াভাবে ব্যবহার করছি।
ক্রিস ব্র্যান্ডসমা

আমি যখন বলি যে ল্যাম্বডা কলগুলি এখনও প্রযুক্তিগতভাবে লিনকিউ ব্যবহার করছে তখন আমি প্যাডেন্টিক হওয়ার অর্থ নেই। (বিশেষত, আপনি লাইনকিউ-টু-অবজেক্টস ব্যবহার করছেন)) আপনি ভাষা কীওয়ার্ড না দিয়ে কেবল পদ্ধতি কলগুলি ব্যবহার করছেন।
এহুদা গ্যাব্রিয়েল হিমাঙ্গো

এই উত্তরটি জভোলকভের থেকে কীভাবে আলাদা?
dotnetN00b

4

আবিষ্কার করার আগে আমি যে কৌশলটি ব্যবহার করেছি .Any():

var hasJohn = (from customer in list
      where customer.FirstName == "John"
      select customer).FirstOrDefault() != null;

3
List<Customer> list = ...;
Customer john = list.SingleOrDefault(customer => customer.Firstname == "John");

"জন" এর প্রথম নামের সাথে কোনও গ্রাহক উপস্থিত না থাকলে জন নালু হবে।


2
যদি একাধিক গ্রাহককে জন বলা হয় তবে এটি ব্যতিক্রম করবে ।
জন স্কিটি

1
মন্তব্যের জন্য ধন্যবাদ. আমি উত্তরটি আংশিক সঠিক উদাহরণ হিসাবে রেখে দেব।
এম

এটি এখনও দৃশ্যে বৈধ যখন আপনি নিশ্চিত হন যে সেখানে 1 রয়েছে এবং আপনি একাধিক হলে একটি ব্যতিক্রম উত্থাপন করতে চান, তাই আমি মনে করি এটি ভাল যে আপনি এটি মুছলেন না।
রিচার্ডড

1

আর একটি সম্ভাবনা

if (list.Count(customer => customer.Firstname == "John") > 0) {
 //bla
}

4
এটি 'এই দৃশ্যে যে কোনওটি ব্যবহার করা ভাল।
রিচার্ডড

1

এটি চেষ্টা করুন, আমি আশা করি এটি আপনাকে সহায়তা করবে।

 if (lstCustumers.Any(cus => cus.Firstname == "John"))
 {
     //TODO CODE
 }

4
এটি 8 বছরেরও বেশি আগে গৃহীত উত্তর হিসাবে একই। আপনার উত্তরটি সমস্ত উত্তরের মধ্যে স্বতন্ত্র তা নিশ্চিত করুন।
টনি_েনরিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.