تعریف آرایه اعداد
int[] numbers = { 1, 3, 5, 7, 9, 10, 15, 19, 20, 25, 34, 46, 50, 60, 70, 80, 100 };
این خط یک آرایه از اعداد صحیح به نام numbers تعریف میکند.
مثالهای مختلف با استفاده از LINQ و عبارات لامبدا- کپی کردن آرایه به یک آرایه جدید
int[] result1 = (from n in numbers select n).ToArray();
var lambda1 = numbers.ToArray();
هر دو خط کد یک کپی از آرایه numbers ایجاد میکنند.
- مرتبسازی نزولی
int[] result2 = (from n in numbers orderby n descending select n).ToArray();
var lambda2 = numbers.OrderByDescending(n => n).ToArray();
این خطوط کد آرایه numbers را به صورت نزولی مرتب کرده و نتیجه را به یک آرایه جدید تبدیل میکنند.
- فیلتر کردن و مرتبسازی نزولی
int[] result3 = (from n in numbers where n > 30 && n < 80 orderby n descending select n).ToArray();
var lambda3 = numbers.Where(n => n > 30 && n < 80).OrderByDescending(n => n).ToArray();
این خطوط کد اعداد بین ۳۰ و ۸۰ را فیلتر کرده و سپس به صورت نزولی مرتب میکنند.
- یافتن اولین عدد برابر با ۳
int result4 = (from n in numbers where n == 3 select n).First();
var lambda4 = numbers.First(n => n == 4);
این خطوط کد اولین عدد برابر با ۳ را پیدا میکنند. توجه کنید که در lambda4 باید عدد ۳ باشد نه ۴.
- یافتن اولین عدد برابر با ۲ یا مقدار پیشفرض
int result5 = (from n in numbers where n == 2 select n).FirstOrDefault();
var lambda5 = numbers.FirstOrDefault(n => n == 2);
این خطوط کد اولین عدد برابر با ۲ را پیدا میکنند یا اگر وجود نداشت مقدار پیشفرض (۰) را برمیگردانند.
- یافتن تنها عدد برابر با ۳
int result6 = (from n in numbers where n == 3 select n).Single();
این خط کد تنها عدد برابر با ۳ را پیدا میکند و اگر بیش از یک عدد وجود داشته باشد، خطا میدهد.
- یافتن تنها عدد برابر با ۲ یا مقدار پیشفرض
int result7 = (from n in numbers where n == 2 select n).SingleOrDefault();
این خط کد تنها عدد برابر با ۲ را پیدا میکند یا اگر وجود نداشت مقدار پیشفرض (۰) را برمیگرداند.
- بررسی وجود عدد برابر با ۲
bool result8 = (from n in numbers where n == 2 select n).Any();
var lambda8 = numbers.Any(n => n == 2);
این خطوط کد بررسی میکنند که آیا عدد ۲ در آرایه وجود دارد یا خیر.
- تعداد اعداد در آرایه
int Count = (from n in numbers select n).Count();
var count = numbers.Count();
این خطوط کد تعداد اعداد در آرایه را برمیگردانند.
- بیشترین و کمترین عدد در آرایه
int Max = (from n in numbers select n).Max();
int Min = (from n in numbers select n).Min();
این خطوط کد بیشترین و کمترین عدد در آرایه را برمیگردانند.
- مجموع اعداد در آرایه
int Sum = (from n in numbers select n).Sum();
این خط کد مجموع اعداد در آرایه را برمیگرداند.
کار با لیست اسامی
List<string> Names = new List<string>();
Names.Add("Iman");
Names.Add("Ali");
Names.Add("Sara");
Names.Add("Mohammad");
Names.Add("Mina");
این خطوط کد یک لیست از اسامی ایجاد و چند نام به آن اضافه میکنند.
- کپی کردن لیست به یک لیست جدید
var res1 = (from n in Names select n).ToList();
var lam1 = Names.ToList();
هر دو خط کد یک کپی از لیست Names ایجاد میکنند.
- فیلتر کردن اسامی که شامل حرف "i" هستند
var res2 = (from n in Names where n.ToLower().Contains("i") select n).ToList();
var lam2 = Names.Where(n => n.ToLower().Contains("i")).ToList();
این خطوط کد اسامی که شامل حرف "i" هستند را فیلتر میکنند.
- فیلتر کردن اسامی که با حرف "i" شروع میشوند
var res3 = (from n in Names where n.ToLower().StartsWith("i") select n).ToList();
این خط کد اسامی که با حرف "i" شروع میشوند را فیلتر میکند.
- فیلتر کردن اسامی که با حرف "i" تمام میشوند
var res4 = (from n in Names where n.ToLower().EndsWith("i") select n).ToList();
این خط کد اسامی که با حرف "i" تمام میشوند را فیلتر میکند.
در اینجا سه روش مختلف برای افزودن اشیاء به لیست List<Person> را مشاهده میکنید. هر کدام از این روشها مزایا و معایب خاص خود را دارند:
- روش اول: ایجاد شیء و سپس تنظیم خصوصیات
Person p1 = new Person();
p1.PersonID = 1;
p1.Name = "Iman";
p1.family = "Madaeny";
p1.Age = 30;
people.Add(p1);
- مزایا: خوانایی بالا، مناسب برای زمانی که نیاز به تنظیم خصوصیات به صورت جداگانه دارید.
- معایب: طولانیتر و نیاز به خطوط کد بیشتر.
- روش دوم: استفاده از مقداردهی اولیه شیء
Person p2 = new Person()
{
PersonID = 2,
Name = "Sara",
family = "Ahmadi",
Age = 18
};
people.Add(p2);
- مزایا: کوتاهتر و خواناتر، مناسب برای زمانی که میخواهید تمام خصوصیات را به صورت همزمان تنظیم کنید.
- معایب: ممکن است برای اشیاء پیچیدهتر کمتر خوانا باشد.
- روش سوم: افزودن مستقیم شیء به لیست
people.Add(new Person()
{
PersonID = 3,
Name = "Ali",
family = "Rezai",
Age = 41
});
- مزایا: کوتاهترین روش، مناسب برای افزودن سریع اشیاء به لیست.
- معایب: ممکن است خوانایی کد را کاهش دهد و برای اشیاء پیچیدهتر کمتر مناسب باشد.
هر کدام از این روشها بسته به نیاز و شرایط خاص پروژه میتوانند مفید باشند.
یک مثال عملی
کلاس Person
internal class Person
{
public int PersonID { get; set; }
public string Name { get; set; }
public string family { get; set; }
public int Age { get; set; }
}
کلاس PersonCar
internal class PersonCar
{
public int PersonID { get; set; }
public string CarName { get; set; }
public string CarModel { get; set; }
}
کلاس Program
static void Main(string[] args)
{
List<Person> people = new List<Person>();
Person p1 = new Person();
p1.PersonID = 1;
p1.Name = "Iman";
p1.family = "Madaeny";
p1.Age = 30;
people.Add(p1);
Person p2 = new Person()
{
PersonID = 2,
Name = "Sara",
family = "Ahmadi",
Age = 18
};
people.Add(p2);
people.Add(new Person() { PersonID = 3, Name = "Ali", family = "Rezai", Age = 41 });
Console.WriteLine("------------ result1 ------------");
var result1 = people.ToList();
foreach (var p in result1)
{
Console.WriteLine($"ID : {p.PersonID} Name : {p.Name} Family : {p.family} Age : {p.Age}");
}
Console.WriteLine("----------- result2 ----------");
var result2 = people.OrderByDescending(p => p.Age).ToList();
foreach (var p in result2)
{
Console.WriteLine($"ID : {p.PersonID} Name : {p.Name} Family : {p.family} Age : {p.Age}");
}
Console.WriteLine("----------- result3 ----------");
var result3 = people.Where(p => p.Name.ToLower() == "iman").ToList();
foreach (var p in result3)
{
Console.WriteLine($"ID : {p.PersonID} Name : {p.Name} Family : {p.family} Age : {p.Age}");
}
Console.WriteLine("---------- result4 -----------");
var result4 = people.Where(p => p.Age > 25 && p.Age < 40).ToList();
foreach (var p in result4)
{
Console.WriteLine($"ID : {p.PersonID} Name : {p.Name} Family : {p.family} Age : {p.Age}");
}
Console.WriteLine("---------- result5 -----------");
var result5 = people.Select(p => p.Name).ToList();
foreach (var p in result5)
{
Console.WriteLine($"result : {p}");
}
Console.WriteLine("---------- result6 -----------");
var result6 = people.Select(p => new { p.Name, p.Age }).ToList();
foreach (var p in result6)
{
Console.WriteLine($"result : {p}");
}
Console.WriteLine("---------- join -----------");
List<PersonCar> Cars = new List<PersonCar>()
{
new PersonCar() { PersonID = 1, CarName = "Pride", CarModel = "1380" },
new PersonCar() { PersonID = 3, CarName = "peykan", CarModel = "1382" }
};
var join =(from p in people
join c in Cars on p .PersonID equals c.PersonID
select new
{
p.PersonID,
p.Name,
p.family,
p.Age,
c.CarName,
c.CarModel
}).ToList();
foreach(var p in join)
{
Console.WriteLine($"result : {p}");
}
Console.ReadKey();
}
linq-learning-SourceSara.com.pdf
حجم:
4.7M
توضیحات بیشتر در این فایل قرار دارد
سایت روکسو یک منبع عالی برای آموزش LINQ در سی شارپ (C#) است. این سایت آموزشهای مقدماتی تا پیشرفته را به صورت رایگان ارائه میدهد و تمامی مباحث LINQ را به صورت مثال محور و کاربردی پوشش میدهد.
شما میتوانید از طریق لینک زیر به این آموزشها دسترسی پیدا کنید:
https://www.roxo.ir/series/linq-tutorials
Entity Framework (EF)
یک ORM (Object-Relational Mapping) برای .NET است که به توسعهدهندگان اجازه میدهد با پایگاهدادهها به صورت شیءگرا کار کنند. این ابزار به شما کمک میکند تا از کدهای SQL مستقیم بینیاز شوید و تمام عملیات پایگاهداده را از طریق کدهای سی شارپ انجام دهید.
به طور خلاصه، EF فرآیند کار با دادهها را آسانتر و سریعتر میکند. شما نیازی به نوشتن کدهای پیچیده SQL ندارید و میتوانید به راحتی تغییرات در مدل دادههایتان را مدیریت کنید. این ابزار همچنین از انواع مختلف پایگاهدادهها پشتیبانی میکند، که این امر آن را به یک ابزار چندمنظوره تبدیل کرده است.
و Entity Framework (EF) چندین ویژگی و قابلیت دارد که کار با پایگاهدادهها را بسیار سادهتر میکند. در اینجا به برخی از مهمترین ویژگیهای آن اشاره میکنم:
1- مدلسازی دادهها: شما میتوانید مدلهای دادهای خود را به صورت کلاسهای سی شارپ تعریف کنید. EF این کلاسها را به جداول پایگاهداده تبدیل میکند.
2- کوئرینویسی: به جای نوشتن کوئریهای SQL، میتوانید از LINQ (Language Integrated Query) استفاده کنید که به شما اجازه میدهد کوئریها را به صورت شیءگرا بنویسید.
3- مهاجرتها (Migrations): EF به شما اجازه میدهد تغییرات در مدل دادههایتان را به راحتی مدیریت کنید و این تغییرات را به پایگاهداده اعمال کنید.
4- ردیابی تغییرات: EF تغییرات در اشیاء را ردیابی میکند و به شما اجازه میدهد این تغییرات را به پایگاهداده اعمال کنید.
5- پشتیبانی از چندین پایگاهداده: EF از پایگاهدادههای مختلفی مانند SQL Server، SQLite، MySQL و PostgreSQL پشتیبانی میکند.
برای شروع کار با EF، ابتدا باید پکیجهای مربوطه را نصب کنید. سپس میتوانید مدلهای دادهای خود را تعریف کرده و از EF برای انجام عملیات CRUD (Create, Read, Update, Delete) استفاده کنید.
بیایید یک مثال ساده از نحوه استفاده از Entity Framework در یک پروژه سی شارپ را بررسی کنیم. فرض کنیم میخواهیم یک برنامه ساده برای مدیریت کتابها ایجاد کنیم.
1. نصب پکیجهای مورد نیازابتدا باید پکیجهای Entity Framework Core را نصب کنید. میتوانید از دستور زیر در Package Manager Console استفاده کنید:
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
2. تعریف مدل دادهاییک کلاس برای مدل دادهای کتابها ایجاد میکنیم:
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public int Year { get; set; }
}
3. ایجاد کلاس Contextیک کلاس برای مدیریت ارتباط با پایگاهداده ایجاد میکنیم:
public class LibraryContext : DbContext
{
public DbSet<Book> Books { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("YourConnectionStringHere");
}
}
4. انجام عملیات CRUDحالا میتوانیم عملیات CRUD را انجام دهیم. به عنوان مثال، برای اضافه کردن یک کتاب جدید:
using (var context = new LibraryContext())
{
var book = new Book
{
Title = "The Great Gatsby",
Author = "F. Scott Fitzgerald",
Year = 1925
};
context.Books.Add(book);
context.SaveChanges();
}
5. خواندن دادههابرای خواندن دادهها از پایگاهداده:
using (var context = new LibraryContext())
{
var books = context.Books.ToList();
foreach (var book in books)
{
Console.WriteLine($"{book.Title} by {book.Author}");
}
}
6. بهروزرسانی دادههابرای بهروزرسانی یک کتاب:
using (var context = new LibraryContext())
{
var book = context.Books.FirstOrDefault(b => b.Id == 1);
if (book != null)
{
book.Title = "The Great Gatsby (Updated)";
context.SaveChanges();
}
}
7. حذف دادههابرای حذف یک کتاب:
using (var context = new LibraryContext())
{
var book = context.Books.FirstOrDefault(b => b.Id == 1);
if (book != null)
{
context.Books.Remove(book);
context.SaveChanges();
}
}
این یک مثال ساده از نحوه استفاده از Entity Framework برای مدیریت دادهها در یک پروژه سی شارپ بود
یک مثال کامل از یک برنامه کنسول سی شارپ با استفاده از Entity Framework Core ایجاد کنیم. این برنامه یک پایگاهداده ساده برای مدیریت کتابها خواهد داشت.
1. ایجاد پروژه کنسولابتدا یک پروژه کنسول جدید در Visual Studio ایجاد کنید.
2. نصب پکیجهای مورد نیازدر Package Manager Console، دستورات زیر را اجرا کنید تا پکیجهای Entity Framework Core نصب شوند:
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
3. تعریف مدل دادهاییک کلاس برای مدل دادهای کتابها ایجاد کنید:
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public int Year { get; set; }
}
4. ایجاد کلاس Contextیک کلاس برای مدیریت ارتباط با پایگاهداده ایجاد کنید:
public class LibraryContext : DbContext
{
public DbSet<Book> Books { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("YourConnectionStringHere");
}
}
5. انجام عملیات CRUD در برنامه کنسولدر فایل Program.cs، کد زیر را اضافه کنید تا عملیات CRUD را انجام دهید:
using System;
using System.Linq;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (var context = new LibraryContext())
{
// اضافه کردن یک کتاب جدید
var book = new Book
{
Title = "The Great Gatsby",
Author = "F. Scott Fitzgerald",
Year = 1925
};
context.Books.Add(book);
context.SaveChanges();
// خواندن دادهها
var books = context.Books.ToList();
Console.WriteLine("Books in the library:");
foreach (var b in books)
{
Console.WriteLine($"{b.Title} by {b.Author}");
}
// بهروزرسانی دادهها
var bookToUpdate = context.Books.FirstOrDefault(b => b.Id == book.Id);
if (bookToUpdate != null)
{
bookToUpdate.Title = "The Great Gatsby (Updated)";
context.SaveChanges();
}
// حذف دادهها
var bookToDelete = context.Books.FirstOrDefault(b => b.Id == book.Id);
if (bookToDelete != null)
{
context.Books.Remove(bookToDelete);
context.SaveChanges();
}
}
}
}
}
6. تنظیم Connection Stringدر کلاس LibraryContext، رشته اتصال (Connection String) را با اطلاعات پایگاهداده خود جایگزین کنید:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=your_server;Database=your_database;Trusted_Connection=True;");
}
7. اجرای برنامهحالا میتوانید برنامه را اجرا کنید. این برنامه ابتدا یک کتاب جدید اضافه میکند، سپس لیست کتابها را نمایش میدهد، کتاب را بهروزرسانی میکند و در نهایت آن را حذف میکند.
این یک مثال کامل از نحوه استفاده از Entity Framework Core در یک برنامه کنسول سی شارپ بود.
این کد شامل دو بخش اصلی است: ایجاد و پر کردن یک پایگاه داده SQL و سپس استفاده از Entity Framework در C# برای دسترسی به دادهها. بیایید هر بخش را توضیح دهیم:
1. ایجاد و پر کردن پایگاه داده SQL
CREATE DATABASE People_DB;
GO
USE People_DB;
GO
CREATE TABLE People (
PersonID int IDENTITY(1,1) PRIMARY KEY,
FirstName nvarchar(50) NOT NULL,
LastName nvarchar(50) NOT NULL,
Age int NOT NULL
);
GO
INSERT INTO People (FirstName, LastName, Age)
VALUES ('Ali', 'Rezai', 32), ('Mohammad', 'Naseri', 24), ('Hasan', 'Karimi', 55);
GO
- CREATE DATABASE People_DB;:
یک پایگاه داده جدید به نام People_DB ایجاد میکند.
- USE People_DB;:
پایگاه داده People_DB را برای استفاده انتخاب میکند.
- CREATE TABLE People (...);:
یک جدول به نام People با ستونهای PersonID, FirstName, LastName, و Age ایجاد میکند. PersonID به صورت خودکار افزایش مییابد و کلید اصلی است.
- INSERT INTO People (...);:
سه رکورد به جدول People اضافه میکند.
2. استفاده از Entity Framework در C#
People_DBEntities dB = new People_DBEntities();
var list = dB.People.ToList();
foreach (var item in list)
{
Console.WriteLine($"PersonID: {item.PersonID}, Name: {item.FirstName}, Family: {item.LastName}, Age: {item.Age}");
}
Console.ReadKey();
- People_DBEntities dB = new People_DBEntities();:
یک شیء از نوع People_DBEntities ایجاد میکند که نمایانگر پایگاه داده است.
- var list = dB.People.ToList();:
تمام رکوردهای جدول People را به صورت لیست بازیابی میکند.
- foreach (var item in list) {...}:
هر رکورد را در لیست پیمایش کرده و اطلاعات آن را چاپ میکند.
این کد به شما اجازه میدهد تا دادههای موجود در پایگاه داده را با استفاده از Entity Framework در C# بازیابی و نمایش دهید.
برای نصب Entity Framework، میتوانید از روشهای مختلفی استفاده کنید. در اینجا دو روش رایج برای نصب Entity Framework Core و Entity Framework 6 را توضیح میدهم:
نصب Entity Framework Core- با استفاده از .NET CLI:
- ابتدا مطمئن شوید که .NET SDK نصب شده است.
- سپس دستور زیر را در خط فرمان اجرا کنید:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
- این دستور بسته NuGet مربوط به SQL Server را نصب میکند. میتوانید نسخه خاصی را با استفاده از -v مشخص کنید، مثلاً:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 6.0.14
- با استفاده از Visual Studio:
- از منوی Visual Studio، گزینه Project > Manage NuGet Packages را انتخاب کنید.
- در تب Browse، بسته Microsoft.EntityFrameworkCore.SqlServer را جستجو و نصب کنید.
نصب Entity Framework 6- با استفاده از Package Manager Console:
- از منوی Visual Studio، گزینه Tools > NuGet Package Manager > Package Manager Console را انتخاب کنید.
- دستور زیر را در کنسول اجرا کنید:
Install-Package EntityFramework
- برای نصب نسخه خاصی، از -Version استفاده کنید، مثلاً:
Install-Package EntityFramework -Version 6.2.0
- با استفاده از Manage NuGet Packages:
- از منوی Visual Studio، گزینه Project > Manage NuGet Packages را انتخاب کنید.
- در تب Browse، بسته EntityFramework را جستجو و نصب کنید.
این روشها به شما کمک میکنند تا Entity Framework را به پروژه خود اضافه کنید و از آن برای دسترسی به دادهها استفاده کنید.