تفاوت بین ()First و ()FirstOrDefault در LINQ
شنبه 30 خرداد 1394LINQ تکنولوژی جدیدی است که شرکت ماکروسافت با عرضه نسخه ی سوم Net. آن را معرفی نمود. در این مقاله تفاوت بین دستورات ()First و ()FirstOrDefault بررسی می شود.
LINQ به یک قسمت مهم از برنامه نویسی تبدیل شده است اما برای بعضی از برنامه نویسان تازه کار که جدیدا کار با LINQ را شروع کرده اند ابهاماتی در درک سینتکس های مشابه هم، مانند ()First و ()FirstOrDefault و همچنین ()FirstOrDefault با ()Single و ()SingleOrDefault و غیره وجود دارد.
در اینجا به تفاوت میان ()First و ()FirstOrDefault خواهیم پرداخت.
الف. ()First
1.هنگامی که از دستور ()First در Linq استفاده می نماییم اگر رکوردی با شرط های موجود در قسمت Where پیدا نشود شما با Exception ای با عنوان زیر مواجه می شوید :
InvalidOperationException: Sequence contains no elements
Var x=(from m in Member
Where m.UserName=’S000’
Select m.Name,m.Income,m.Year ).First()
در جدول Member هیچ رکوردی وجود ندارد تا با عبارت m.username=s000 مطابقت داشته باشد(یعنی کاربری با نام کاربری s000 در این جدول وجود ندارد). بنابر این کوئری فوق خطای (Exception) زیر مواجه می شود :
InvalidOperationException: Sequence contains no elements
برای مدیریت کردن این خطا در #C می توان از دستور try Catch زیر استفاده نمود :
try { Var x=(from m in Member Where m.UserName=’S000’ Select m.Name,m.Income,m.Year ).First() } catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); }
2. زمانی که رکوردهای زیادی با عبارت شرط ما وجود دارد و شما تنها اولین رکورد از آنها را می خواهید می توان از ()First استفاده نمود.
برای مثال :
Var x=(from m in Member Where m.UserName=’s123’ Select m.Name,m.Income,m.Year).First()
سپس به شما بر می گرداند :
3. ()First : اولین عنصر از آرایه را بر می گرداند.
4. ()First : هنگامی که عنصری وجود نداشت با Exception مواجه می شود.
ب. ()FirstOrDefault :
1. زمانی که از ()FirstOrDefault در Linq استفاده می نماییم اگر رکوردی با شرط های موجود در قسمت Where پیدا نشود مقدار پیش فرض (Null) برگردانده می شود :
Var x=(from m in Member
Where m.UserName=’S000’
Select m.Name,m.Income,m.Year ).FirstOrDefault()
در جدول Member هیچ رکوردی وجود ندارد تا با عبارت m.username=s000 مطابقت داشته باشد(یعنی کاربری با نام کاربری s000 در این جدول وجود ندارد). بنابر این کوئری فوق خطای (Exception) مواجه نشده بلکه مقدار پیش فرض Null برگردانده می شود.
اما اگر در #C از دستور زیر استفاده کنیم با Exception مواجه می شویم مانند :
Console.WriteLine(x.Name);
به دلبل وجود نداشتن رکورد با مشخصات موجود در کوئری Exception زیر برگردانده می شود.
“object reference not set to an instance of an object”
برای مدیریت کردن این خطا در #C می توان از دستور try Catch زیر استفاده نمود :
try { Var x=(from m in Member Where m.UserName=’S000’ Select m.Name,m.Income,m.Year ). FirstOrDefault () If(x!=null) { Console.WriteLine(x.Name); } else { Console.WriteLine("No Record Found"); } } catch (Exception ex) { Console.WriteLine(ex.Message); }
2. ()FirstOrDefault : اولین عنصر از آرایه را بر می گرداند.
3. ()FirstOrDefault : هنگامی که عنصری وجود نداشت با Exception مواجه نمی شود.
- C#.net
- 6k بازدید
- 5 تشکر