جستجو در LINQ

جستجو در LINQ

بسم الله الرحمن الرحیم

جستجو یک لیست در عناصر لیست دیگر

روش های زیادی برای انجام یک کار وجود دارد و در بسیاری از مواقع تمامی این روش ها شما را به مقصودتان می رساندد اما طبیعتا همه ی آنها روش  درست نیستند. یکی از موارد زیادی که ممکن است برای شما نیز اتفاق بیافتد جستجو کردن یک لیست از اطلاعات درون یک لیست دیگر است طبیعتا اولین راه حل نوشتن یک حلقه (f

بسم الله الرحمن الرحیم

جستجو یک لیست در عناصر لیست دیگر

روش های زیادی برای انجام یک کار وجود دارد و در بسیاری از مواقع تمامی این روش ها شما را به مقصودتان می رساندد اما طبیعتا همه ی آنها روش  درست نیستند. یکی از موارد زیادی که ممکن است برای شما نیز اتفاق بیافتد جستجو کردن یک لیست از اطلاعات درون یک لیست دیگر است طبیعتا اولین راه حل نوشتن یک حلقه (for, foreach, while, ,...) و بررسی تک تک عناصر مجموعه اول در مجموعه دوم است.

در اینجا با یک کد بسیار ساده LINQ (لینک تلفظ می شود) می توانیم این بررسی را انجام دهیم.

تصور کنید یک لیست از کاربران خود را با یک شرط مشخص از پایگاه داده واکشی می کنیم. مثلا تمامی کاربرانی که فیلد enable آنها true است.


using (ContextDB contextDB = new ContextDB())
{

var listOfUserID = contextDB.Users.Where(x => x.Enabled == true).Select(x => x.UserID).ToList();
List<Student> StudentUsers = contextDB.Students.Where(x => listOfUserID.Contains(x.UserID)).ToList();

foreach (var item in StudentUsers)
{
      Response.Write(item.FirstName);
}

}

 در خط اول این دستور ما ابتدا لیست کاربرانی که مقدار فیلد Enabled آنها true است را انتخاب کرده ایم و سپس فقط ستون UserID را از این رکوردها واکشی کرده و در متغییر listOfUserID ذخیره کرده ایم.

در خط دوم بر روی جدولی به نام Student کوئری را اجرا کرده ایم. این کوئری دانش آموزانی که ID آنها در listOfUserID موجود است را انتخاب می کند.

در واقع اگر بخواهیم خیلی ساده این مثال را تکرار کنیم به صورت زیر خواهد بود:


int[] listOfUserID = new int[] {1,2,3,4,5};
int[] students = new int[] {1,2,3,9,10};
var result = students.Where(x => listOfUserID.Contains(x)).toList();

در مثال بالا دو لیست داریم می خواهیم در لیست students لیست listOfUserID را بررسی کنیم و در واقع Join ایجاد کنیم تا اشتراک این دو لیست را مشخص کنیم.

در نهایت در صورت اجرای دستور بالا نتیجه زیر بدست خواهد آمد

جستجو با استفاده از LINQ

در صورتی که بخواهیم تفاضل این دولیست را مشخص کنیم می تواینم از علامت NOT و یا همان ! استفاده کنیم مانند زیر


int[] listOfUserID = new int[] {1,2,3,4,5};
int[] students = new int[] {1,2,3,9,10};
var result = students.Where(x => !listOfUserID.Contains(x)).toList();

نتیجه اجرای دستور بالا خروجی زیر خواهد بود

جستجو با استفاده از linq

همانطور که در ابتدای مقاله گفتیم برای انجام یک کار روش های زیادی وجود دارد، ما نیز در این جا یکی از این روش ها را بررسی کردیم.

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس