ملیساا 5015 اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 1 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ نرم افزار یکی از ارکان مهم فناوری اطلاعات و ارتباطات در عصر حاضر است . گرچه نرم افزار در گذشته نيز همواره حائز اهمیت بوده است ، ولی در ساليان اخير به دليل گسترش اينترنت و ظهور نسل جديدی از برنامه های کامپيوتری موسوم به برنامه های وب ، نگاه به نرم افزار و انتظار از آن در جهت تامين طيف گسترده ای از خواسته ها تغيير و رشد چشمگيری يافته است . به همين دليل است که در دنيای نرم افزار هر روز تحولات مهمی اتفاق می افتد و فناوری های جديدی قدم در اين عرصه می گذارند . ظهور فناوری LINQ ( برگرفته شده از Language-INtegrated Query ) تلاشی است در اين راستا که با هدف تحول در نحوه دستیابی به منابع داده ( صرفنظر از نوع منبع داده ) ، مطرح شده است . پس از مطرح شدن هر گونه فناوری در عرصه نرم افزار ، طراحان و پياده کنندگان با سه پرسش اساسی مواجه می گردند : این فناوری چيست ؟ چه کار می کند ؟ و چرا ما به آن نیاز داريم ؟ در این مقاله و سایر مقالاتی که در ادامه بر روی سایت منتشر خواهد شد ، سعی خواهیم کرد به سه پرسش فوق در ارتباط با فناوری LINQ پاسخ دهيم . مقدمه کد و داده دو عنصر اساسی در نرم افزار می باشند که هر یک دارای جایگاه تعريف شده مختص به خود است . یکی از فعالیت های مهم در زمان پياده سازی نرم افزار ، نوشتن کد مورد نیاز جهت دستيابی به داده است . برای نوشتن کد ، پياده کنندگان می توانند از زبان های برنامه نویسی مختلفی استفاده کنند . انتخاب زبان برنامه نویسی به عوامل متعددی نظیر نوع رفتار برنامه ، پيش زمينه و دانش پياده کنندگان ، مهارت های تیم پياده کننده ، نوع سیستم عامل و سياست های سازمان بستگی دارد . صرفنظر از این که پياده کنندگان چه زبانی را برای نوشتن کد انتخاب می نمایند ، در زمان پياده سازی نرم افزار به دفعات مجبور خواهیم بود که با داده سرو کار داشته باشیم . داده می تواند بر روی ديسک ، جداولی در بانک اطلاعاتی و يا اسناد XML ذخيره شده باشد . در برخی موارد لازم است که با تمامی نوع های اشاره شده در یک برنامه سرو کار داشته باشیم . فراموش نکنيم که مديريت داده برای هر پروژه نرم افزاری یک باید است . پياده کنندگان نرم افزار در زمان نوشتن کد و تولید امکانات مورد نياز در هر يک از لایه های متفاوت ( با توجه به نوع معماری نرم افزار ) ، همواره این پرسش را با خود مطرح می نمایند که محيط پياده سازی و یا فريمورک هائی نظیر دات نت چه امکاناتی را در اختيار آنها خصوصا" در زمان کار با داده قرار می دهند . به عبارت دیگر ، يک سيستم عامل چگونه می تواند نياز پياده کنندگان نرم افزار را پوشش دهد و چه امکانات و پتانسيل هائی را در اختيار علاقه مندان به طراحی و پياده سازی نرم افزار قرار می دهد . دات نت به عنوان یکی از فريمورک های پياده سازی نرم افزار در سالیان اخير ، امکانات متعددی را جهت کار با داده در اختيار پياده کنندگان نرم افزار قرار می دهد . LINQ ، تلاشی است جهت يکپارچگی عميق تر و بیش تر بین زبان های برنامه نویسی و داده . در واقع LINQ مشتمل بر مجموعه ای از عملگرهای query استاندارد است که معماری لازم جهت حرکت ، *****ينگ و اجرای عملیات بر روی تقريبا" هر نوع منبع داده نظیر XML ، بانک های اطلاعاتی رابطه ای و اشياء درون حافظه را فراهم می نماید . قبل از هر چيز اجازه دهيد ببينيم LINQ چيست ؟ LINQ چيست ؟ با این که فناوری LINQ در پائيز سال 2005 مطرح گردید ولی فرآیند پیاده سازی آن از سال 2003 آغاز شده بود . هدف از ابداع فناوری فوق، ارائه تسهيلات لازم برای پياده کنندگان جهت کار با داده در بانک های اطلاعاتی SQL و XML عنوان شده است. در واقع ، وجود یک حلقه گمشده بین داده رابطه ای ( بانک های اطلاعاتی ) ، اسناد XML با زبان های برنامه نویسی ، ضرورت ابداع فناوری فوق را توجيه کرده بود . پياده کنندگان مجبور بودند برای کار با هر يک از منابع داده ، از روش های مختلفی استفاده نمایند . LINQ را می توان به منزله حلقه ای گمشده بین دنیای داده و زبان های برنامه نویسی همه منظوره تصور کرد . با استفاده از LINQ امکان دستیابی به داده صرفنظر از نوع داده ، با روشی مشابه و یکسان فراهم می گردد . پیاده کنندگان نرم افزاردر زمان نوشتن برنامه های خود معمولا" از دو زبان مختلف جهت رسیدن به یک هدف مشترک استفاده می نمایند . ما برای نوشتن کدها از یک زبان برنامه نویسی نظیر VB.NET و يا #C و برای گفتگو با سیستم بانک اطلاعاتی از یک زبان دیگر نظیر SQL استفاده می کنيم . برای سفارش شام خود از یک زبان و برای سفارش چای از زبان دیگر ! این موضوع می تواند چالش های متعددی را برای پياده کنندگان نرم افزار به دنبال داشته باشد : در مواردی که فريمورک دات نت را به عنوان پلت فرم انتخاب کرده باشیم ، دات نت قادر به درک کدهای SQL نخواهد بود. در مواردی که از زبان های برنامه نویسی حمايت شده در دات نت جهت نوشتن کد در محيط ويژوال استوديو استفاده می کنيم ، همواره یک ابزار قدرتمند در کنار ما است تا در صورت اشتباه در گرامر دستورات توصیه های لازم را ارائه نماید ( IntelliSense ) .از ويژگی فوق نمی توان در ارتباط با SQL استفاده کرد . امکان بررسی نوع ها در زمان ترجمه وجود ندارد . این بدان معنی است که پياده کنندگان تا زمانی که برنامه اجراء نگردد ، نمی توانند مشکلات احتمالی را مشاهده و قبل از زمان اجراء با آنها برخورد نمایند . شرکت مايکروسافت امکانات متعددی را در فريمورک دات نت جهت کار با اسناد XML ارائه کرده است . ارائه System.Xml ، System.Xml.XPath و System.Xml.Schema نمونه هائی در این زمینه می باشند . پياده کنندگان نرم افزار در زمان کار با اسناد XML مجبور بودند که از فناوری های متعددی نظیر DOM ( برگرفته شده از Document Object Mode ) و XQuery استفاده نمایند . همين موضوع باعث شده بود که کار با اسناد XML نظیر خواندن و یا نوشتن داده در آنها برای بسیاری از پياده کنندگان مشکل باشد. شرکت مايکروسافت برای حل مشکلات فوق ، بررسی دو راهکار را در دستور کار خود قرار داد : ایجاد پتانسیل های مورد نیاز مختص XML و یا داده رابطه ای در هر یک از زبان های برنامه نویسی و زمان اجراء . راهکار فوق نه تنها مشکل اصلی را حل نمی کرد بلکه در مواردی مشکلات را خصوصا" در زمینه نگهداری افزایش می داد . اضافه کردن قابلیت های همه منظوره نوشتن query در فریمورک دات نت . به عبارت دیگر یک فریمورک همه منظوره با قابلیت نوشتن query درون فريمورک دات نت که زبان های VB.NET و #C بتوانند به سادگی از مز ایای آن استفاده نمایند . خوشبختانه ، شرکت مایکروسافت گزينه دوم را انتخاب نمود . ایجاد یک زیرساخت جهت نوشتن query در بين اشياء ، اسناد XML ، داده رابطه ای و ... هم اینک پیاده کنندگان می توانند از مزايای یک الگوی تعريفی در هر یک از زبان های دات نت جهت کار با داده استفاده نمایند . ارائه مجموعه اپراتورهای استاندارد جهت نوشتن query یکی از دستاوردهای مهم LINQ محسوب می گردد . بدین ترتیب ، پياده کنندگان می توانند با بکارگیری یک مجموعه يکسان از اپراتورهای نوشتن query در هر یک از زبان های برنامه نویسی حمایت شده در دات نت ، از داده ذخیره شده در منابع داده مختلف صرفنظر از نوع منبع داده استفاده نمایند . همچنين ، امکان استفاده از پتانسیل هائی نظیر IntelliSense و بررسی نوع ها در زمان ترجمه نیز وجود خواهد داشت . شکل 1 نحوه عملکرد LINQ را نشان می دهد . شکل 1 : عملکرد فناوری LINQ مثال برای آشنایی اولیه با قابلیت های LINQ ، بد نيست بدون این که بخواهیم وارد جزئيات شویم یک مثال کاربردی را با یکدیگر دنبال نمائیم . در اين مثال با استفاده از LINQ و با يک روش مشابه به منابع داده مختلفی متصل شده و پس از بازیابی داده ، آنها را در يک ListBox جداگانه نمایش می دهيم . منابع داده عبارتند از : فولدرهای موجود در یک درایو پردازه های در حال اجراء در ويندور يک بانک اطلاعاتی رابطه ای SQL عناصر موجود در يک آرایه يک فایل XML یک فایل متن '================================================= =================== کلاس ایجاد شده بر اساس داده موجود در بانک اطلاعاتی Contact برای جدول Persons LINQ to SQL Class _Public Class Person _ Public ID AsInteger _ Public Name AsString _ Public Email AsString EndClass '================================================= =================== Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) بازیابی فولدرهای موجود در درایو C Dim DI As DirectoryInfo = New DirectoryInfo("C:\\") Dim dirQuery = From dir In DI.GetDirectories() Order By (dir.Name) Select dir.Name For Each item In dirQuery ListBox1.Items.Add(item) Next item '================================================= =================== بازیابی پردازه های در حال اجرا در ویندور Dim procQuery = From proc In Process.GetProcesses() Order By proc.Id _ Descending Select proc.Id, proc.ProcessName For Each item In procQuery ListBox2.Items.Add(item.Id & " " & item.ProcessName) Next item '================================================= ==================== بازیابی داده موجود در جدول Persons بانک اطلاعاتی Conatct Dim context As DataContext = New DataContext("Data Source=SRCO-1\SQLEXPRESS; Initial Catalog=Contact;Integrated Security=true") Dim contact1 As Table(Of Person) = context.GetTable(Of Person)() Dim query = From c In contact1 Select c.Name, c.Email For Each item In query ListBox3.Items.Add(item.Name & " " & " ==== ◄ " & item.Email) Next item '================================================= ====================== بازیابی عناصر یک آرایه Dim firstnames As String() = {"سخا روش", "سايت شرکت سخا روش", "سايت مقالات به زبان فارسی", "سری مقالات ", "ایران", "تهران"} Dim val As IEnumerable(OfString) = From fn In firstnames _ Where (fn.StartsWith("س")) _ Select fn For Each name As String In val ListBox4.Items.Add(name) Next name '================================================= ======================= بازیابی داده ذخیره شده در یک فایل XML با نام Cities.xml Dim XDoc As XDocument = XDocument.Load(MapPath("Cities.xml")) Dim query1 = From c In XDoc.Descendants("City") _ Order By c.Element("Name").Value _ Select c.Element("Name").Value For Each item In query1 ListBox5.Items.Add(item) Next item '================================================= ===================== بازیابی داده از یک فایل متن با نام Maghalat.csv Dim query2 = From line In File.ReadAllLines(MapPath("Maghalat.csv")) _ Where Not line.StartsWith("#") _ Let parts = line.Split(",") _ Select Title = parts(0), Publisher = parts(1) For Each item In query2 ListBox6.Items.Add(item.Title & " " & item.Publisher) Next item End Sub script> '================================================= ====================== مثال شماره یک title> head> asp:ListBox> asp:ListBox> asp:ListBox> asp:ListBox> asp:ListBox> asp:ListBox> div> form> body> html> شکل زیر خروجی برنامه فوق را نشان می دهد . شکل 2 : دستيابی به منابع داده مختلف با استفاده از فناوری LINQ خلاصه LINQ يک فناوری قدرتمند در زمان کار با داده است که دستاوردهای متعددی را برای پياده کنندگان به ارمغان آورده است : روشی ساده جهت نوشتن query تسریع در پیاده سازی نرم افزار با توجه به حذف خطاهای زمان اجراء امکان استفاده از امکاناتی نظیر اشکال زدائی و IntelliSence در زمان پياده سازی حذف خلاء موجود بين داده رابطه ای و پیاده سازی شی گراء استفاده از یک گرامر يکسان جهت نوشتن query صرفنظر از نوع منبع داده افزایش بازدهی و راندمان برنامه نویسی ، چراکه برنامه نویسان از یک رویکرد يکسان برای نوشتن query و بهنگام سازی داده از طریق زبان برنامه نویسی استفاده خواهند کرد . LINQ از دو بخش که مکمل يکديگر می باشند تشکيل شده است : مجموعه ای از ابزار ها جهت کار با اشياء ، اسناد XML ، بانک های اطلاعاتی رابطه ای و سایر نوع های داده و مجموعه ای از ضمایم برای زبان های برنامه نویسی نظیر VB و #C . منبع : سخاروش 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ يكي از موجودات جديدي كه در دنياي برنامهنويسي شيگراي داتنت درحال پرورش است، زبان جالبي به نام LINQ است. كلمه LINQ سرنام Language Integrated Query است. منطق زبان لينك از روي زبان SQL گرفته شده است و اين زبان در پي پاسخدادن به مسئله پيچيدهاي در دنياي برنامهنويسي پيشرفته است كه مثلث راكس (ROX Triangle) ناميده ميشود. پس اجازه بدهيد ببينم مثلث راكس چيست. اين روزها اكثر برنامهنويساني كه با زبانهاي شيگرايي مثل سي شارپ يا جاوا كار ميكنند، از دو ابزار مهم ديگر نيز براي ساختن برنامههاي خود استفاده ميكنند: يكي از اين ابزارها ديتابيس يا همان بانكاطلاعاتي، و ديگريXML است. البته XML موجود جديدي در بافت نرمافزارها است، ولي اكنون معلوم شده كه با حضور اينترنت در دنياي كامپيوتر، استفاده از XML تقريبا قابل چشم پوشي نيست. مشكلي كه برنامهنويسان با آن درگيرند اين است كه هر يك از اين سه ابزار از منطق و مدل دادهاي (Data Model) متفاوتي پيروي ميكنند. مدل دادهها در بانكهاي اطلاعاتي معمولاً زبان SQL است. در حالي كه هر زبان برنامهنويسي مدل دادهاي خاصي دارد. مثلاً پلتفرم داتنت از فناوري ADO.NET استفاده ميكند. واضح است كه مدل دادهها در ADO.NET و SQL تفاوتهاي زيادي با هم دارند. مدل دادهها در فرمت XML هم به گونه ديگري است. در XML بايد از زبان XQuery استفاده كنيد. برنامه نويس در حين كار روزمره خود مرتباً نياز دارد دادههاي خود را از يك مدل به مدل ديگر منتقل كند. مثلاً در يك برنامه مديريت فروش محصولات، گاهي برنامهنويس لازم ميداند دادههاي مشتريان را از بانك اطلاعاتي (مثلا ًSQL Server ياMySQL يا ORACLE) بخواند و سپس به فرمت XML تبديل كند تا بتواند آن را از مجراي اينترنت (مثلاً از طريق وبسرويسها) عبور دهد. در اين صورت ناگزير است همزمان دادهها را ابتدا با منطق SQL بخواند، سپس با منطق Business Tier (مثل ADO.NET) پردازش كند و سپس با منطق XQuery تبديل كند. اريك مير از متخصصانSQL Server در شركت مايكروسافت اين سه گانگي را مثلث ROX ناميده است كه سرنام عبارات Relations in data tier ،Objects in business tier وXML in presentation tier است. قطعه كد 1 LINQ؛ زبان دوست داشتني كارشناسان طراحي زبانهاي برنامهنويسي در شركت مايكروسافت مدتي است براي پيدا كردن يك راهحل براي اين مسئله، روي زبان لينك كار ميكنند. اين زبان البته يك زبان جديد برنامهنويسي در كنار سيشارپ و ويژوال بيسيك نيست، بلكه يك syntax است كه درون كدهاي برنامه به كار گرفته ميشود. (قطعه كد 1) اين قطعه كد به قدري گويا است كه حتي كسي كه برنامهنويس نيست نيز متوجه معني آن ميشود. تاكنون بهكارگيري چنين منطقي در زبانهاي برنامهنويسي شيگرا سابقه نداشته است. اين syntax خيلي به منطق و زبان انسان شبيه است. به همين دليل استفاده از آن باعث ساده شدن زبان برنامهنويسي ميشود. تيم توسعه پلتفرم داتنت در مايكروسافت برهميناساس در حال طراحي و توسعه دو API براي زبان LINQ است. يكي از اينها مجموعه DLINQ است كه براي پياده سازي زبان لينك روي ADO.NET به كار ميرود. ديگري XLINQ ناميده شده كه براي امكانپذير ساختن استفاده از منطق لينك روي XML به كار ميرود. كوشش بر اين است كه syntax برنامهنويسي در هر دو مورد مشابه زبان SQL باشد. به گونهاي كه برنامهنويسي بدون توجه به اينكه از كدام API زبان لينك استفاده ميكند، به يك شيوه بتواند با دادهها كاركند.اين APIها قرار است در چارچوب داتنت 3 (نسخه نهم زبان ويژوال بيسيك و نسخه سوم زبان سي شارپ) بهكار گرفته شوند. يكي از اهدافي كه اين تيم از بهكارگيري منطق لينك در زبانهاي برنامه نويسي داتنت دنبال ميكند، امكانپذير ساختن اشكال زدايي از عبارات Query است. اگر برنامهنويس باشيد، حتماً ميدانيد كه تمام قسمتهاي يك كد منهاي عبارات Query كه به صورت رشتههاي متني ميآيند، قابل اشكالزدايي يا Debugging هستند. قرارگرفتن عبارات Query به صورت مقادير متني داخل سورس كد، عملاً اشكالزدايي از آنها را دشوار ميكند. با بهكارگيري منطق زبان لينك اين مشكل به مقدار زيادي حل ميشود؛ زيرا Queryها بهجاي اينكه به صورت مقادير متني نوشته شوند، بخشي از سورس كد هستند. به همين دليل اين تكنيك Language Integrated Query نامگذاري شده است. تيم توسعه دات نت حتي به اين موضوع فكر كرده است كه استفاده از ابزار Intellisense در ويرايشگر كد ويژوال استوديو بتواند روي زبان لينك مانور دهد. اين چيزي است كه عملاً روي API متعلق به بخشهاي DLINQ و XLINQ اتفاق ميافتد. در نتيجه برنامهنويس ميتواند كد LINQ را كامپايل نمايد و در صورت بروز خطا آن را اشكالزدايي كند.استفاده از XLINQ برنامهنويسان را از بهكارگيري منطق XQuery كه گاهي گيجكننده است، معاف ميكند؛ ضمن اينكه براي كاركردن با دادهها در ADO.NET و لايه Business Tier ميتوانيد از همان منطق و رهيافت زبان SQL در بانكاطلاعات استفاده كنيد. منبع : ماهنامه شبکه 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ امروزه دیگر نمیتوان منکر کاربرد نرم افزارهای کامپیوتری در زندگی روزمره بشر گردید. همچنین در اکثر برنامه هایی که امروزه بر روی کامپیوترها به کار میروند، استفاده از بانکهای اطلاعاتی انکارناپذیر است. به همین دلیل از اوایل دهه 80 میلادی تلاشهای فراوانی برای بهبود نرمافزاریهای بانک اطلاعاتی گردید و منجر به ظهور مدلهای جدید و متعددی برای ایجاد پایگاههای داده گردید. یکی از این مدلها که هم اکنون در بسیاری از نرمافزارها پیاده سازی شده است مدل RDBMS میباشد. به عنوان نمونه میتوان SQL Server و همچنین Oracle را نام برد. در حال حاضر، برای ایجاد و توسعه برنامههای مبتنی بر بانکهای اطلاعاتی، این دو نرمافزار بیشتر از مدلهای مشابه مورد استفاده قرار میگیرند. پس از انتخاب نرم افزار ارائه دهنده خدمات بانک اطلاعاتی، نوبت به انتخاب زبان برنامه نویسی میرسد. در اینجا نیز ذکر این مورد کافیست که اگر نگاهی که گذشته داشته باشیم متوجه میشویم که در بیست سال گذشته زبانهایِ با قابلیت برنامه نویسی شئگرا به عنوان اولین و بهترین زبان برای توسعه نرمافزارها در نظر گرفته میشوند. در میان زبانهای با قابلیت برنامه نویسی شئگرا زبان #C و Java از امکانات بهتری برخوردارند. با نگاهی به دو نرم افزار انتخاب شده در بالا متوجه به تضادی میشویم که از گذشته تا کنون گریبانگیر برنامه نویسان متعددی بوده است. با توجه به اینکه SQL Server یک بانک اطلاعاتی رابطهای است پس نمیتوان با آن به صورت شئگرا در برنامهها ارتباط برقرار کرد. البته مایکروسافت برای رفع این مشکل تا قبل از سال 2005 فعالیتهایی نظیر ارائه DataSet و ADO.NET انجام داده است. اما با این حال هنوز نمیتوان به صورت کاملاً شئگرا با این مدل از بانکهای اطلاعاتی ارتباط برقرار کرد. در این میان شرکتهای مطرح نرم افزاری دنیا مانند Mircrosoft نیز بیکار نمانده اند و بر روی پروژه هایی برای رفع مشکل یاد شده در بالا فعالیت نموده اند. مهمترین و بهترین پروژهای که در این مورد بر روی آن کار شده است پروژه LINQ میباشد. با استفاده از این تکنولوژی دیگر نیاز به کار بردن روشهای متفاوت برای بازیابی اطلاعات از منابع دادهای گوناگون مانند بانکهای اطلاعاتی رابطه ای، اسناد XML و حتی اشیاء درون حافظه نیست. در این روش از یک گرامر مشابه برای بازیابی اطلاعات از هر نوع منبع دادهای استفاده میشود؛ و البته گرامری که این روش از آن استفاده میکند به صورت شئ گرا میباشد. در ادامه نگاهی کلی بر فرم کلی این روش خواهیم انداخت و سپس به توضیح و بررسی قسمتهای مخلتف پروژه میپردازیم. برای درک کلی گرامر این روش مثال زیر را در نظر بگیرید: int[ ] i= {1,2,3,4,5,6,7,8,9,10,11}; var query = from p in i where p>=5 select p; objectdumper.write(query); اگر کدهای بالا را کامپایل و اجرا کنید کلیه اعدادی که در آرایه i از عدد 5 بیشتر میباشند انتخاب و در متتغیر query ذخیره میشوند. این مدل استفاده از LINQ به مدل عملگری مشهور است. کامپایلر #C پس از برخورد با این عبارت آن را به فراخوانی متدهایی تبدیل میکند. پس از تبدیل، عبارت پرس و جوی بالا به صورت زیر در خواهد آمد. var query= i.where(p=> p>5); خروجی هر دو مدل معادل یکدیگر میباشند. متغیر p که در هر دو حالت از آن استفاده شده است برای حرکت در مجموعه مورد نظر، به کار میرود و در هر بار به یک عنصر در این مجموعه اشاره میکند. در مورد کلاس ObjectDumper باید به عرض برسانم که این ابزار یک کلاس ساده با یک متد به نام ()Write است و از آن برای تهیه خروجی قالبدار استفاده میشود. این بدان معناست که دیگر برای چاپ اطلاعات لازم نیست با استفاده از ساختارهای تکرار در مجموعه مورد نظر حرکت کنید و با استفاده از متد ()Writeو یا ()WriteLine که در کلاس Console قرار دارند اطلاعات را چاپ کنید. ObjectDumper هنگام نصب NET. بر روی کامپیوتر شما کپی میشود. بنابراین برای استفاده از آن کافییست فایل Objectdumper.cs را جستجو کرده و آن را به پروژه خود اضافه کنید. اما اگر به جای استفاده از LINQ، بخواهیم با استفاده از روشهای متداول قبلی این کار را انجام دهیم باید از دستوراتی مانند زیر استفاده نمود. int[] i= {1,2,3,4,5,6,7,8,9,10,11}; for (int j = 0; j { if (i[j]>=5) { Console.WriteLine(i[j]); } } همانطور که مشاهده میکنید استفاده از LINQ برای بازیابی اطلاعات بسیار سادهتر و قابل فهمتر میباشد. البته مزیت دیگر این تکنولوژی به گرامر آن برمیگردد. گرامر LINQ بسیار شبیه به گرامر SQL است؛ با توجه به اینکه کمتر برنامهنویسی پیدا میشود که با گرامر SQL آشنایی نداشته باشد، لذا استفاده از این گرامر بهترین انتخاب برای این تکنولوژی به حساب میرود. در ادامه قصد دارم که با بررسی مثالی پیچیدهتر وارد جزئیات LINQ شوم. برای این منظور ابتدا یک کلاس به نام Person که دارای 4 خصوصیت می باشد به صورت زیر تعریف میکنم. Class Person { } List people = new List { new Person{ID=1, IDRole=1, LastName="Andy", FirstName="Brad"}, new Person{ID=2, IDRole=2, LastName="Gray", FirstName="Tom" }, new Person{ID=3, IDRole=2, LastName="Gran", FirstName="Mary"}, new Person{ID=4, IDRole=3, LastName="Cops", FirstName="Gary"} }; var query = from p in people where p.FirstName.Length == 4 select new { p.FirstName, p.LastName }; ObjectDumper.Write(query); در این برنامه چند نکته جالب توجه وجود دارد که از خصوصیت جدید C# 3.0 می باشد. در ابتدای کار ممکن است تعجب کنید که چرا برای شئ people نوعی در نظر گرفته نشده است و از کلمه کلیدی var استفاده شده است. آیا var یک نوع جدید در C# می باشد؟ در جواب باید گفت که نه؛ در C# 3.0 میتوان متغیرهای محلی با نوعهای ضمنی ایجاد کرد. این بدان معناست که دیگر الزامی نیست که برای متغیرها حتماً یک نوع عرفی تعیین کنید و با گذاشتن کلمه کلیدی var قبل از تعریف متغیر به کامپایلر اعلام میکنید که نوع این متغیر را براساس عبارتی که برای مقداردهی اولیه آن در نظر گرفته شده است تعیین کند. به عنوان مثال هر دو دستور زیر معادل یکدیگر می باشند: var n = 5; int n = 5; در استفاده از کلمه کلیدی var باید توجه داشته باشید که متغیری که با این نوع اعلام میشود باید حتماً مقداردهی اولیه گردد؛ در غیر اینصورت برنامه با خطای کامپایلری روبرو میشود. استفاده از کلمه کلیدی var برای تعیین نوع خروجی پرس و جوهای پیچیدهای که در ادامه ممکن است با آنها روبرو شویم بسیار مفید است و برنامه نویس را از قید تعیین یک نوع تعریف شده برای خروجی پرس و جوها آزاد میسازد. به توضیح ادامه برنامه بالا برمیگردیم. در ابتدا یک شئ از نوع با استفاده از مقداردهنده اولیه به اشیاء، همانند مقداردهنده اولیه به آرایهها، میتوانید بدون فراخوانی سازنده کلاسی که از روی آن نمونهسازی انجام میگیرد (و یا فراخوانی متدهایی که برای درج در نظر گرفته شده اند مانند ()Add در کلاس Person p1= new Person{ID = 1, FirstName="A", LastName="A"}; Person p2 = new Person(); p2.ID = 1; مشاهده میکنید که با استفاده از این خصوصیت کار ایجاد اشیاء چقدر آسانتر میشود. در ادامه با استفاده از یک پرس و جو ساده نام و نام خانوادگی افرادی که طول فیلد نام آنها برابر 4 باشد بازیابی و نشان داده میشود. همانطورکه مشاهده میکنید دستوری که برای این منظور در نظر گرفته شده است بسیار شبیه به دستور قبلی است. امیدوارم که تا اینجای کار متوجه اصول کلی کار با LINQ شده باشید. در LINQ عملگرهای پرس و جو بسیاری وجود دارد؛ اما به دلیل کمبود وقت از تشریح آنها صرف نظر میکنم. البته در انتهای مطلب برای مطالعه بیشتر منابعی را که مورد استفاده قرار دادهام ذکر خواهم کرد. تا بدین جا نحوه استفاده از LINQ برای بازیابی اطلاعات از اشیاء درون حافظه مورد بررسی قرار گرفت. در ادامه نگاهی بر نحوه ارتباط این تکنولوژی با پایگاه داده SQL Server خواهیم انداخت ارتباط LINQ با SQL برای بازیابی اطلاعات از پایگاه داده SQL روشی مشابه روش بالا مورد استفاده قرار میگیرد. تنها تفاوت موجود به تعیین منبع داده در قسمت from از عبارت پرس و جوی LINQ مربوط میگردد. در اینجا باید برای بازیابی اطلاعات از جداول داده و استفاده در برنامه کلاسهایی را ایجاد کرد. اولین کار اضافه کردن فضانام مربوط به استفاده از LINQ to SQL می باشد. برای این کار باید فضانام System.Data.Linq را به پروژه اضافه کنید. البته باید اسمبلی این فضانام را به Reference های برنامه اضافه نمود. اسمبلی حاوی این فضانام به صورت پیش فرض در لیست موجود در پنجره Add Reference به نام System.Data.Linq.dll وجود دارد. پس از این کار باید به ازاء هر جدولی که قصد داریم در برنامه از آن استفاده کنیم، یک کلاس ایجاد کرد. البته تعریف این کلاس قدری با تعریف کلاسهای معمولی در #C تفاوت دارد. برای شروع ایجاد کلاس ابتدا جدول زیر را در نظر بگیرید. در این جدول 3 فیلد وجود دارد. در کلاسی که قرار است با این جدول ارتباط داده شود باید به ازاء هر فیلد در جدول یک فیلد خصوصی در کلاس ایجاد کنید؛ و البته برای دسترسی به اطلاعات این فیلد خصوصی باید یک خصوصیت عمومی نیز تعریف شود. تفاوتی که در بالا به آن اشاره شد، به استفاده از ویژگیهایِ جدید #C در تعریف کلاس برمیگردد. اولین ویژگی، ویژگی Table است. هدف استفاده از این ویژگی این است که به کامپایلر اعلام شود این کلاس قرار است با کدام جدول در پایگاه داده ارتباط داده شود [Table(Name = "Person")] public class Person { } خصوصیت Name از این ویژگی در واقع بیانگر نام جدول است. اگر از این خصوصیت استفاده نکنید، کامپایلر به صورت خودکار نام کلاس را به عنوان نام جدول در نظر می گیرد. [Table(Name = "Person")] public class Person { } در ادامه باید فیلدهایِ خصوصی مناسبی برای نگهداری اطلاعات فیلدهای موجود در جدول ایجاد شود. ایجاد این فیلدها مانند ایجاد فیلدهای عادی است. [Table(Name = "Person")] public class Person { private int _ID; } حال باید برای دسترسی به اطلاعات این فیلدها و همچنین ارتباط آنها با ستون های موجود در جدول، خصوصیتهای مناسبی تعریف کرد. البته در تعریف خصوصیتها باید از ویژگی Column نیز استفاده کرد. [Column(Name = "ID", Storage = "_ID", DbType = "int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int ID { get { return _ID; } set { _ID = value; } } از این خصوصیت برای دسترسی به اطلاعات فیلد ID_ استفاده میشود. البته با استفاده از ویژگی Column ستونی در جدول که قرار است اطلاعات آن در فیلد _ID قرار گیرد مشخص میشود. در اینجا ستون مورد نظر ID است. ویژگی Column دارای خصوصیات متعددی است. در ادامه تعدادی از آنها را که پر کاربرد هستند توضیح میدهم. Name: از این خصوصیت برای تعیین نام ستون مورد نظر در جدول دادهها استفاده میشود. Storage: با استفاده از این خصوصیت نام فیلدی که قرار است اطلاعات ستون مورد نظر در آن قرار گیرد مشخص می شود. DbType: از این خصوصیت برای تعیین نوعی که در جدول برای ستون مورد نظر در نظر گرفته شده است، استفاده میکنیم. با به کارگیری این خصوصیت، کامپایلر قادر به چک کردن نوع مقادیری که انتساب داده میشوند در زمان کامپایل میباشد. IsPrimaryKey: اگر ستونی که قرار است آن را Bind کنیم در جدول به عنوان کلید اصلی در نظر گرفته شده باشد، با استفاده از این خصوصیت باید این مورد را به کامپایلر و LINQ اعلام کرد. IsDbGenerated: اگر در تعریف ستون مورد نظر در پایگاه داده اعلام شده باشد که مقدار این فیلد در توسط خود پایگاه داده تولید میشود، باید از این خصوصیت به همراه مقدار true استفاده کرد. در زیر کد کاملی که برای کلاس Person باید نوشته شود را مشاهده می کنید. [Table(Name = "Person")] public class Person { private int _ID; private string _lastName; private string _firstName; [Column(Name = "ID", Storage = "_ID", DbType = "int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int ID { get { return _ID; } set { _ID = value; } } [Column(Name = "LastName", Storage = "_lastName", DbType = "nvarchar NOT NULL")] public string LastName { get { return _lastName; } set { _lastName = value; } } [Column(Name = "FirstName", Storage = "_firstName", DbType = "nvarchar NOT NULL")] public string FirstName { get { return _firstName; } set { _firstName = value; } } } تا بدینجا کلیه عملیات لازم برای ذخیره اطلاعات جدول Person در اشیاء موجود در برنامه انجام شده است. اکنون باید برای برقراری ارتباط با پایگاه داده تدبیری اندیشید برای اینکار دیگر لازم نیست مانند قبل از اشیاء SqlConnection استفاده کرد. LINQ برای برطرف کردن این مورد کلاسی به نام DataContext معرفی کرده است. برای استفاده از ویژگیهای این کلاس میبایست ابتدا کلاسی ایجاد کنید و از کلاس DataContext ارث بری کنید public partial class PeopleDataContext : DataContext { } حال باید در سازنده کلاس PeopleDataContext سازنده کلاس پدر (DataContext) را فراخوانی کرد. در واقع DataContext یک کانال دوطرفه برای ارتباط با پایگاه داده میباشد. یعنی از یک طرف دستورات LINQ را گرفته و آن را به دستورات معادل در SQL تبدیل می کند و آن را به سمت سرور پایگاه داده منتقل میکند. و پس از اجرای دستورات در سرور نتایج بدست آمده را دریافت و در اشیاء مربوط در برنامه قرار می دهد. بنابراین برای ارتباط به سرور پایگاه داده در کلاس DataContext سازنده های مختلفی در نظر گرفته شده است. ساده ترین سازنده استفاده از یک رشته اتصال است که در مدلهای قبلی اتصال به پایگاه داده نیز مورد استفاده قرار می گرفت. برای این منظور باید کلاس PeopleDataContext را به صورت زیر تغییر داد: public partial class PeopleDataContext : DataContext { public PeopleDataContext(String connString) : base(connString) { } } بنابراین باید در هنگام نمونه سازی از این کلاس، باید رشته اتصال مورد نظر را به سازنده این کلاس ارسال کرد. کمی صبر کنید؛ هنوز کار تمام نشده است. باید برای نگهداری اطلاعاتی که قرار است از جدول Person بازیابی شوند باید شئ ای از نوع public Table People; نوع Table یک کلاس جامع می باشد که توسط LINQ ارائه شده است. اکنون همه چیز برای انجام پرس و جو ار پایگاه داده آماده است. فرض کنید که میخواهیم اطلاعات افرادی که شماره شناسایی (ID) از 2 بیشتر است را بازیابی کنیم و در یک کنترل DataGridView نشان دهیم. برای این کار باید از کدهایی زیر استفاده کنیم. private void btnLoad_Click(object sender, EventArgs e) { String connString = @" Data Source=.;Initial Catalog=People; Integrated Security=True"; PeopleDataContext people = new PeopleDataContext(connString); var query = from p in people.People where p.ID > 2 select p; dataGridView1.DataSource = query; } کدهای فوق در رویداد کلیک از کنترل button نوشته شده است. همانطورکه مشاهده میکنید نحوه پرس و جو دقیقاً مانند روشی است که برای پرس و جو از اشیاء درون حافظه به کار میرود؛ فقط باید منبع دادهای که برای پرس و جو در نظرگرفته شده است را مطابق با نیاز تنظیم کنیم. در انتها نیز برای نشان داده اطلاعات بازیابی شده کافی است به خصوصیت DataSource از کنترل DataGridView را به متغیری که برای ارجاع به خروجی پرس و جو در نظر گرفته شده است مرتبط کنیم. کلاس DataContext خصوصیات پیشرفته دیگری نیز دارد که در ادامه تعدادی از آنها و همچنین نحوه درج و حذف اطلاعات را نیز بررسی میکنیم. یکی از خصوصیات جالب کلاس DataContext خصوصیت Log میباشد. از این خصوصیت برای بدست آوردن دستوری که DataContext برای ارسال به پایگاه داده ایجاد می کند، استفاده می شود. به عنوان مثال تکه برنامه زیر را در نظر بگیرید، با استفاده از خصوصیت Log دستور Selectی که برای بازیابی اطلاعات ایجاد شده است، را مشاهده می کنیم. String connString = @"Server=.;database=People;integrated security=sspi"; PeopleDataContext people = new PeopleDataContext(connString); people.Log = Console.Out; var query = from p in people.People where p.ID == 1 select new { p.LastName, p.FirstName }; foreach (var row in query) { Console.WriteLine("Name: {0}, {1}",row.LastName, row.FirstName); } خروجی این برنامه که در حالت Console نوشته شده است، به صورت زیر میباشد. Asdadasdasd مشاهده میشود که دستور مورد نظر ما با گرامر SQL توسط DataContext ایجاد شده است. درج رکورد با استفاده از LINQ برای درج یک رکورد جدید با استفاده از LINQ فقط کافیست که یک شئ جدید از نوع کلاسی که به جدول مورد نظر شما Bind شده است، ایجاد کنید و سپس آن را به فیلدی که از نوع به عنوان مثال کدهای زیر یک رکورد جدید به جدول Person اضافه میکند. Person person = new Person(); person.FirstName = txtName.Text; person.LastName = txtFamily.Text; people.People.Add(person); people.SubmitChanges(); توجه داشته باشید که در رکورد جدید مقداری برای فیلد ID در نظر گرفته نشده است؛ زیرا این فیلد باید توسط پایگاه داده مقداردهی گردد. در اینجا یکی دیگر از مزیتهای LINQ به چشم میخورد. پس از اینکه متد ()SubmitChanges فراخوانی گردید اطلاعاتی که توسط پایگاه داده تولید میشود به شئ موجود در برنامه برگشت داده میشود. بنابراین برای اعلام شماره شناسایی افراد لازم نیست که با دیگر یک پرس و جو بر روی جدول اعمال شود. زیرا در همان رکوردی که اطلاعات فرد قرار دارد شماره شناسایی وی نیز قرار گرفته است. البته اگر از خصوصیت Log در کلاس DataContext برای بدست آوردن دستوری که برای پایگاه داده ارسال شده است، استفاده کنید، مشاهده خواهیم کرد که پس از دستور Insert یک دستور Select استفاده شده است و در آن با استفاده از تابع ()Scope_Identity آخرین مقداری که به فیلدی که خصوصیت Identity آن true است برگشت داده میشود. ویرایش رکوردها برای ویرایش رکوردها ابتدا باید رکورد مورد نظر را بازیابی کنیم و سپس اطلاعات موجود در آن را تغییر دهیم و سپس با استفاده از فراخوانی متد ()SubmitChanges تغییرات را به پایگاه داده ارسال کرد. در اینجا یکی دیگر از مزیتهای LINQ مورد استفاده قرار میگیرد. در LINQ سرویسی به نام سرویس پیگیری تغییرات وجود دارد؛ با استفاده از این سرویس تغییرات اعمال شده بر روی دادهها پیگری میشود. اگر متد ()SubmitChanges فراخوانی شود و این در حال باشد که در اطلاعات موجود تغییری داده نشده باشد، LINQ از ایجاد دستور Update و ارسال برای پایگاه داده خودداری میکنید. در تکه برنامه زیر ابتدا رکوردی بازیابی شده و سپس مقدار خصوصیات آن تغییر میکند. در انتها با فراخوانی متد ()SubmitChanges تغییرات به پایگاه داده اعمال میگردد. public String connString = @"Server=.;database=People;integrated security=sspi"; PeopleDataContext people = new PeopleDataContext(connString); var person = people.People.Single(p => p.ID == 1); person. FirstName="A"; person. LastName="A"; people.SubmitChanges(); با اجرای برنامه مقادیر فیلدهای نام و نام خانوادگی فردی که شماره شناسایی وی برابر 1 میباشد به A تغییر پیدا کرده و با فراخوانی متد ()SubmiyChanges دستور مناسبی تولید شده و برای پایگاه داده ارسال میگردد. حال اگر دوباره برنامه را اجرا کنیم با توجه به اینکه تغییری در اطلاعات حاصل نمیشود بنابراین دستوری برای ارسال به پایگاه داده ایجاد نمیشود. حذف رکوردها حذف رکورد از دو عمل قبل کاملاً آسانتر است. برای اینکار کافی است که اطلاعات را از جدول بازیابی کنید و سپس با استفاده از متد ()Remove شئ مربوطه را حذف کنید. در زیر قطعه کدی برای این منظور نوشته شده است. var person = people.People.Where (p => p.IDRole == 1); people.People.Remove(person); people.SubmitChanges(); در این برنامه اطلاعات فردی که شماره شناسایی وی برابر با 1 میباشد از پایگاه داده حذف میشود. امکانات اضافی LINQ ممکن است بسیاری از برنامه نویسان فکر کنند که ایجاد کلاسهای موجودیت برای برنامههای بزرگ که بانک اطلاعاتی بسیار بزرگی دارند، مقرون به صرفه نباشد و استفاده از مدلهای قبلی بسیار مفیدتر باشد. البته این تفکر شاید تا حدودی درست باشد. اما با تاملی دوباره و عمیق درباره استفاده شئگرایانه از بانکهای اطلاعاتی ارتباطی میتواند بر روی این مشکل سرپوش بگذارد. البته جای نگرانی نیز وجود ندارد؛ زیرا سازندگان این اثر نیز به فکر این مشکل بودهاند و برای حل آن ابزارهایی نیز ارائه کردهاند. یکی از این ابزارها که بسیار پرکاربرد نیز میباشد، ابزار SQLMetal میباشد. با استفاده از این ابزار میتوانید کلاسهای موجودیت برای تمامی جداول موجود در پایگاه داده را ایجاد کنید. برای این منظور ابتدا باید خط فرمان که توسط Visual Studio 2008 ارائه شده است را اجرا کنید و از این ابزار استفاده کنید. دستور زیر را در نظر بگیرید: sqlmetal /server:. /database:People /pluralize /code:People.cs با استفاده از این دستور کلاسهای موجودیت که در بانک اطلاعاتی People وجود دارد در فایل People.cs ایجاد میشود و به راحتی میتوانید با اضافه کردن این فایل به پروژه از کلاسهای آن استفاده کنید. این ابزار پارامترهای متعددی دارد که در ادامه تعدادی از پر کاربردترین آنها را شرح میدهیم: Server: از این پارامتر برای تعیین سرور پایگاه داده استفاده میشود. در این مثال با توجه به اینکه پایگاه داده در کامپیوتر محلی قرار دارد از علامت نقطه (.) استفاده شده است. Database: از این پارامتر برای تعیین نام پایگاه دادهای که قرار است براساس آن کلاسهای موجودیت ایجاد شود، استفاده میشود. Pluralize: از این پارامتر برای تعیین گرامر انگلیسی در ایجاد نام کلاسها و خصوصیات استفاده میشود. Code: از این پارامتر برای تعیین محلی که باید کلاسهای موجودیت در آن قرار گیرند استفاده میشود. البته براساس پسوند فایل زبان C# و یا VB برای ایجاد کلاسها استفاده میشود. برای این کار میتوان از پارامتر Language نیز استفاده کرد. این ابزار پارامترهای دیگری نیز دارد. برای درک عملکرد آن پارامترها میتوانید به منابعی که ذکر میشود مراجعه کنید. منابع مورد استفاده : ·کتاب "LINQ در C# 2008" تالیف گروه واژه ·Ebook های موجود در سایت PersiaDevelopers نویسنده: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ * LINQ Queries * LINQ and the Standard Query Operators * Programming with XLinq * Querying XML with XLinq * Mixing XML and other data models * DLinq and Queries * LINQ over datasets * Interoperating with ADO.NET * LINQ and ASP.NET دانلود کتاب : برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ Don Box, Anders Hejlsberg February 2007 Applies to: Visual Studio Code Name "Orcas" .Net Framework 3.5 Summary: General-purpose query facilities added to the .NET Framework apply to all sources of information, not just relational or XML data. This facility is called .NET Language-Integrated Query (LINQ). (32 printed pages) Contents برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ تیم پروژه کد باز Mono - پیاده سازی CLI/CLR برای محیط های Windows/Linux/Unix/Mac - اعلام کرده است که از 3.0 #C و LINQ پشتیبانی خواهد کرد که این امر نیازمند رفع تمامی باگ های موجود در پیاده سازی 2.0 #C می باشد چرا که بیشتر ویژگی های 3.0 #C بر پایه ویژگی های نسخه 2.0 بنا شده اند که از جمله آن ها می توان lambda expressions را نام کرد که از مفهوم Anonymous Methods به وجود آمده است. Miguel de Icaza یکی از اعضای تیم Monoی ناول در برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام در این خصوص نوشته است: " بر طرف کردن باگ های موجود برای ما بسیار حائز اهمیت است. در 3.0 #C ویژگی lambda functions بر مبنای معماری anonymous methods به وجود آمده است. ما تا چند ماه قبل باگ های اساسی در پیاده سازی anonymous methods داشتیم و این امر باعث شد Martin Baulig چند ماه برای رفع کامل باگ ها کار کند." منبع خبر: persiadevelopers.com 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ این برنامه یک Add-in به ُVS2008 است که به صورت ویژوال Linq به SQL می سازد ، جزئیات کامل و لینک دانلود برنامه و سورس آن در سایت MSDN در زیر موجود است : برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ آموزش LINQ to SQL برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ آموزش مقدماتی LINQ to SQL نويسنده : مهدی قرهی برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ این مقاله به معرفی دو اپراتور جالب زبان LINQ، یعنی Cast و OfType و تفاوت بین عملکردآن ها می پردازد برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ اگر ميخواهيد با Linq برنامه نويسي كنيد ولي با دستورات SQL سال هاست كه كار كرديد و آنها را بهتر درك ميكنيد . هم اكنون ميتوانيد كوئري هاي خود را به SQL نوشته و آنها را با Linqer به زبان Linq تبديل كنيد و از آن در برنامه هاي خود استفاده كنيد . در اين نسخه فقط از زبان سي شارپ پشتيباني ميشود . و فعلاً خبري از Vb نيست . Linqer is a SQL to LINQ converter tool. It will help you to learn LINQ and convert your existing SQL statements. Not every SQL statement can be converted to LINQ, but Linqer covers many different types of SQL expressions. Current Linqer version supports C# language only (not Visual Basic yet). Because LINQ is a part of C# language, it is sensitive to data types conversions. Linqer will do required type castings in the produced LINQ statements. Linqer can convert the most usable SQL Server برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برنامه معروف برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام تاكنون به همراه مثالهاي كتاب C# 3.0 in a Nutshell به صورت يكپارچه ارائه ميشد.اكنون مثالهاي كتاب برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام نيز قابليت يكپارچگي با اين برنامه را يافتهاند. به اين صورت بسيار ساده و در همان محيط LINQPad ميتوان اين مثالها را مرور و اجرا كرد كه در يادگيري LINQ كمك شاياني مينمايند. براي نصب اين مثالهاي يكپارچه جديد، بر روي لينك Download more samples آن كليك كرده و در صفحهي باز شده، بر روي لينكي به نام Download full code listings into LINQPad كليك كنيد. اكنون مثالهاي سي شارپ و VB.Net آن به صورت يكپارچه در اختيار شما خواهند بود. برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام نویسنده :: حسین احمدی 2 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
ملیساا 5015 مالک اشتراک گذاری ارسال شده در 13 آذر، ۱۳۸۹ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
ارسال های توصیه شده