برعکس همه Document های دیگه من Linq رو از آخرش شروع می کنم چون به نظر من پرکاربرد ترین بخش Linq ارتباط با بانک های اطلاعاتی Relational خارجیه مثل SQLServer. بخشی از Linq با اسم Linq to Sql امکان دسترسی به یک Object Model بر اساس Entity های موجود در سیستم رو به ما می ده. به شکل ساده تر: شما می تونید یک لایه تعریف کنید که یه Abstraction از بانک اطلاعاتی به ما ارائه می ده که ما با استفاده از Linq می تونیم Query های خودمون رو روی این Object Model انجام بدیم و Linq to Sql این Query ها رو روی بانک اطلاعاتی انجام خواهد داد.
به این ترتیب شما چنین کدی می نویسید
var query =
from c in Company
where c.Name == "FANA"
select new {c.Id, c.Name };
این Query تبدیل به چنین کدی می شه:
SELECT Id, Name
FROM Company
WHERE Name = 'FANA'
Entities(موجودیت ها)
برای هر موجودیت در بانک اطلاعاتی باید معادلی از نوع کلاس داشته باشیم. هر جدول بانک اطلاعاتی یک کلاس معادل خواهد داشت که تمامی Attribute های آن معادل فیلدهای جدول هستند. البته لازم نیست حتما تمامی فیلدهای جدول در کلاس معادل سازی بشن اما حتما باید همه Attribute ها جزو فیلدهای جدول باشن.
این یه مثال برا یه جدول به اسم Company و دارای فیلدهای Id، Name و State
[Table(Name="Company")]
Public class Customer {
[Column] public string Id;
[Column] public string Name;
[Column(Name="Ostan")] public string State;
}
همونطور که می بینید فیلدState توی کلاس ما به Ostan تغییر نام پیدا کرده. اینطوری می تونیم فیلدهای بانک اطلاعاتی رو با نامهای دیگه توی کلاس داشته باشیم. البته برای تولید کد این کلاس ها شما می تونید از یه روش خیلی راحت تر استفاده کنید.
نوآوری جدید مایکروسافت، LINQ از کلمات Language-Integrated Query گرفته شده. توی چند تا سایت دیدم که نوشته بودن چرا LINQ؟ یا از مزایای LINQ پرسیدن. مایکروسافت یه همچین جوابی به این سوال داده
1)LINQ نوشتن Query ها رو ساده تر می کنه. درضمن اگه شما با زبان های برنامه نویسی C# یا ویژوال بیسیک کار کرده باشید لازم نیست چیزهای زیادی یاد بگیرید تا بتونید پرس و جوهای LINQ بنویسید
2)این ابزار Query گرفتن برای DataSource های مختلف را یکسان کرده. شما می تونید به همون روشی که روی یک بانک SQL Server پرس و جو کنید، روی DataSet یا XML Document و حتی Collection های .net پرس و جو کنید.
3)LINQ ارتباطی بین داده های Relational و دنیای Object Oriented ایجاد می کنه. چون Query روی داده ها همیشه اولین مرحله انجام پروسه کار بر روی داده هاست و با به کار گرفتن LINQ به سادگی میشه بین ارتباط بین Object ها و داده ها رو تعریف کرد.
4)LINQ سرعت تولید نرم افزار رو با گرفتن خطاهای برنامه در زمان Compile افزایش می ده. و خطاهای Query ها رو می شه با ابزارهای Debug که Visual studio در اختیار می زاره تشخیص داد و تصحیح کرد.
امروزه در Business کلمه Workflow معنای خاصی پیدا کرده. کلمه Workflow به این معناست که چطوری و با چه مراحل عملیاتی کاری از شخص به شخص دیگه ای انتقال پیدا می کنه. انجام شدن این مراحل باعث می شه Business logic موجود توی یه سازمان پیاده سازی بشه. مثلا وقتی یه نامه وارد یه سازمان میشه اول باید بره دبیرخانه که ثبت بشه. بعدش بره دست مدیر عامل یا کسی که اختیارات بهش تفویض شده و ایشون نامه رو ارجاع می دن به یکی از دپارتمان ها یا اشخاص سازمان. این نامه توی یک مسیر افتاده که باید مدیریت بشه. بعد از انجام هر مرحله که شرایط خاصی فراهم می شه، Workflow وارد مرحله بعدی می شه.
مایکروسافت برا ساده تر کردن کار برنامه نویس ها یک Engine ارائه داده که با نصب .net 3.5 می تونید به اون دسترسی داشته باشید. این ابزار که حتی یک نمودار Activity از نمودارهای UML رو هم می تونه به عنوان ورودی دریافت کنه این امکان رو به ما میده که خودمون بتونیم مراحل کار رو برای بهتر انجام شدن Business و راضی نگه داشتن Stake holder ها طراحی کنیم.
دو مدل مختلف Workflow داریم که هرکدوم کاربردهای خاص خودشون رو دارن. Sequential و State based
مدل State based داری ساختار پیچیده تر و پرکاربردتریه. توی این مدل ما می تونیم مراحل کار رو تک تک به پروژه اضافه کنیم. این مراحل(activity) به صورت کلاسهایی توی سیستم هستند که ما می تونیم هر نوع کدی که می خواهیم رو به اونا اضافه کنیم. چند نمونه Activity که می تونیم به پروژه اضافه کنیم ایناس
Code activity، Compensate activity، Conditional Activity Group، Delay activity و ...
در آینده در مورد Linq و Workflow و بقیه امکانات .net 3.5 بیشتر مطلب می نویسم.
http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx
خوبی مایکروسافت اینه که با documentation خوب آدم رو دیوونه می کنه. خوش باشید
چند تا از امکانات جدید دات نت ۳.۵ اینا هستن
من خیلی به LINQ علاقه مند شدم. یه همچین کدی رو در نظر بگیرید. خودتون تا تهشو بخونید. فرض کنید یک آرایه داریم به اسم سفارشات )Sefareshat(
var result=
from myVar Sefareshat
where myVar.City == "Tehran" AND Price > 1000
select myVar;
در آینده اطلاعات بیشتری می نویسم که بیشتر با این امکانات آشنا بشید