021-88881776

آموزش کار با پایگاه داده‌ها در سی شارپ

آموزش C# یکی از ضروری‌ترین مهارت‌ها برای هر توسعه‌دهنده نرم‌افزار است، به خصوص زمانی که می‌خواهید داده‌ها را ذخیره کرده و به آن‌ها دسترسی پیدا کنید. کار با پایگاه داده‌ها در سی شارپ از اهمیت ویژه‌ای برخوردار است در این مقاله جامع و کامل، قصد داریم به موضوع “کار با پایگاه داده‌ها در سی شارپ” پرداخته و تمامی جنبه‌های آن را از سطح مبتدی تا پیشرفته بررسی کنیم. . این مقاله شامل بخش‌های مختلفی از جمله اتصال به پایگاه داده‌ها، استفاده از ADO.NET و Entity Framework، عملیات CRUD و انجام عملیات پیچیده با LINQ است.

کار با پایگاه داده‌ها در سی شارپ

سی شارپ (C#) به عنوان یکی از زبان‌های برنامه‌نویسی سطح بالا و قدرتمند، امکانات فراوانی برای ارتباط با پایگاه داده‌ها فراهم می‌کند. توسعه‌دهندگان با استفاده از سی شارپ قادرند به راحتی اطلاعات را از پایگاه داده‌ها خوانده، آن‌ها را تغییر دهند و یا حتی داده‌های جدیدی به پایگاه داده اضافه کنند. این کار با استفاده از ابزارها و تکنیک‌های مختلفی انجام می‌شود که در اینجا به آن‌ها پرداخته می‌شود.

مفاهیم پایه‌ای در کار با پایگاه داده‌ها در سی شارپ

قبل از شروع به کار با پایگاه داده‌ها در سی شارپ، لازم است با مفاهیم اولیه در این زمینه آشنا شویم. یکی از مهم‌ترین این مفاهیم، ارتباط میان برنامه‌نویسی و پایگاه داده‌ها است که معمولاً از طریق پروتکل‌های خاص و ابزارهای مخصوصی مانند ADO.NET و Entity Framework انجام می‌شود.

برای انجام ارتباط میان برنامه‌های سی شارپ و پایگاه داده‌ها، شما به یک رشته اتصال (Connection String) نیاز دارید که به برنامه می‌گوید چگونه به پایگاه داده متصل شود. این رشته معمولاً شامل اطلاعاتی مانند نام سرور، نام پایگاه داده، نوع احراز هویت و سایر تنظیمات است.

اتصال به پایگاه داده‌ها با ADO.NET

ADO.NET یکی از ابزارهای کلیدی در اکوسیستم سی شارپ است که برای تعامل با پایگاه داده‌ها و انجام عملیات‌های مختلف بر روی داده‌ها طراحی شده است. ADO.NET یک مجموعه از کلاس‌ها و کتابخانه‌ها است که برای ارتباط با پایگاه داده‌های رابطه‌ای استفاده می‌شود و به شما این امکان را می‌دهد تا به راحتی اطلاعات را از پایگاه داده‌ها بخوانید، تغییر دهید و حتی داده‌های جدیدی را وارد کنید.

اجزای اصلی ADO.NET

در ADO.NET، ارتباط با پایگاه داده‌ها عمدتاً از طریق چهار جزء اصلی انجام می‌شود:

Connection: این کلاس مسئول ایجاد و مدیریت اتصال به پایگاه داده است. در ADO.NET برای اتصال به پایگاه داده‌ها از کلاس‌هایی مانند SqlConnection (برای SQL Server) یا OleDbConnection (برای پایگاه داده‌های دیگر) استفاده می‌شود.

Command: این کلاس برای اجرای دستورات SQL استفاده می‌شود. از SqlCommand برای اجرای دستورهای SELECT، INSERT، UPDATE و DELETE استفاده می‌کنیم.

DataReader: این کلاس برای خواندن داده‌ها به صورت فشرده و سریع از پایگاه داده استفاده می‌شود. SqlDataReader داده‌ها را به صورت یک‌طرفه و بدون ذخیره‌سازی در حافظه موقت برمی‌گرداند.

DataAdapter: این کلاس به ما اجازه می‌دهد تا داده‌ها را از پایگاه داده به حافظه موقت (DataSet یا DataTable) منتقل کنیم. از این ابزار به طور معمول در ارتباط با داده‌های غیر همزمان یا برای عملیات‌های پیچیده‌تر استفاده می‌شود.

مراحل اتصال به پایگاه داده با ADO.NET

برای اتصال به پایگاه داده با ADO.NET مراحل مشخصی باید طی شود. در اینجا به مراحل پایه‌ای و نحوه کارکرد آن‌ها پرداخته می‌شود:

1. ایجاد اتصال به پایگاه داده

برای شروع کار، نیاز داریم که یک شیء از کلاس SqlConnection ایجاد کنیم. این کلاس به عنوان رابط میان برنامه و پایگاه داده عمل می‌کند. برای اتصال به پایگاه داده، باید یک رشته اتصال (Connection String) داشته باشیم. این رشته شامل اطلاعاتی مانند آدرس سرور، نام پایگاه داده، اعتبارنامه‌های کاربر و نوع امنیت است.

مثال رشته اتصال:

string connectionString = "Data Source=serverName;Initial Catalog=databaseName;Integrated Security=True";

در این رشته اتصال:

Data Source: آدرس سرور پایگاه داده را مشخص می‌کند.
Initial Catalog: نام پایگاه داده‌ای است که می‌خواهیم با آن کار کنیم.
Integrated Security=True: به این معنی است که از اعتبارنامه‌های سیستم عامل برای اتصال به پایگاه داده استفاده می‌شود.پ

2. اجرای دستور SQL با SqlCommand

پس از ایجاد اتصال، می‌توانیم دستورات SQL مانند SELECT, INSERT, UPDATE و DELETE را از طریق شیء SqlCommand اجرا کنیم. این دستورها می‌توانند شامل عملیات‌های مختلف بر روی داده‌ها باشند.

برای اجرای دستور SQL، ابتدا باید شیء SqlCommand را با دستور SQL و اتصال ایجاد کنیم. سپس با فراخوانی متدهایی مانند ExecuteReader() برای خواندن داده‌ها، ExecuteNonQuery() برای انجام عملیات‌های تغییر داده و ExecuteScalar() برای به‌دست‌آوردن یک مقدار واحد، این دستورها را اجرا می‌کنیم.

3. خواندن داده‌ها با SqlDataReader

زمانی که داده‌ها از پایگاه داده بازیابی می‌شوند، معمولاً از SqlDataReader برای خواندن داده‌ها به صورت یک‌طرفه و سریع استفاده می‌شود. این شیء داده‌ها را از پایگاه داده به صورت خط به خط می‌خواند و می‌توانیم به داده‌های خوانده شده دسترسی پیدا کنیم.

4. بستن اتصال

در نهایت، پس از اتمام عملیات، باید اتصال به پایگاه داده را ببندیم. برای این کار از متد Close() استفاده می‌کنیم.

مثال عملی

در این مثال، یک اتصال به پایگاه داده ایجاد کرده و داده‌ها از جدول Users خوانده می‌شوند:

using System;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=serverName;Initial Catalog=databaseName;Integrated Security=True";
        SqlConnection connection = new SqlConnection(connectionString);

        try
        {
            // اتصال به پایگاه داده
            connection.Open();

            // نوشتن دستور SQL
            string query = "SELECT * FROM Users";
            SqlCommand command = new SqlCommand(query, connection);

            // اجرای دستور و خواندن داده‌ها
            SqlDataReader reader = command.ExecuteReader();

            // خواندن داده‌ها و نمایش آن‌ها
            while (reader.Read())
            {
                Console.WriteLine(reader["UserName"].ToString());
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
        finally
        {
            // بستن اتصال
            connection.Close();
        }
    }
}

در این مثال:

ابتدا یک اتصال به پایگاه داده ایجاد می‌شود.
سپس یک دستور SQL (SELECT * FROM Users) برای خواندن داده‌ها از جدول Users آماده می‌شود.
با استفاده از SqlDataReader، داده‌ها از پایگاه داده خوانده شده و در کنسول نمایش داده می‌شوند.
در نهایت، اتصال به پایگاه داده پس از اتمام کار بسته می‌شود.

نکات مهم در استفاده از ADO.NET

مدیریت اتصال‌ها: همیشه باید توجه داشته باشید که پس از اتمام عملیات، اتصال به پایگاه داده را ببندید. عدم بستن اتصال‌ها می‌تواند منجر به مشکلات عملکردی و اتلاف منابع شود.

استفاده از دستورات آماده: برای جلوگیری از حملات SQL Injection و بهبود عملکرد، بهتر است از دستورات آماده (Prepared Statements) و پارامترهای SQL استفاده کنید.

مدیریت خطاها: هنگام کار با پایگاه داده‌ها، همیشه باید به مدیریت استثناها (Exception Handling) توجه کنید تا در صورت بروز خطا، برنامه به طور صحیح عمل کند.

استفاده از using: به منظور اطمینان از بسته شدن صحیح اتصال‌ها و منابع، می‌توان از ساختار using در C# استفاده کرد تا منابع به‌طور خودکار آزاد شوند.
در این بخش، نحوه اتصال به پایگاه داده‌ها با استفاده از ADO.NET و انجام عملیات‌های پایه‌ای مانند خواندن داده‌ها از پایگاه داده با SqlDataReader بررسی شد. ADO.NET به دلیل سادگی و انعطاف‌پذیری خود یکی از ابزارهای محبوب برای ارتباط با پایگاه داده‌ها در سی شارپ است و توانایی انجام عملیات‌های پیچیده‌تری مانند درج، به‌روزرسانی و حذف داده‌ها را نیز داراست.

استفاده از Entity Framework برای ORM

Entity Framework (EF) یک چارچوب ORM (Object-Relational Mapping) است که توسط مایکروسافت برای کار با پایگاه داده‌ها و تعامل با آن‌ها در زبان سی شارپ طراحی شده است. این چارچوب به شما این امکان را می‌دهد که از مفاهیم شی‌گرا برای مدیریت داده‌ها استفاده کنید و به جای نوشتن دستورات SQL پیچیده، از LINQ (Language Integrated Query) برای انجام عملیات مختلف بر روی پایگاه داده بهره ببرید.

مفاهیم ORM و Entity Framework

ORM یک تکنیک است که به شما اجازه می‌دهد داده‌ها را از پایگاه داده به صورت شیء در زبان برنامه‌نویسی خود مدیریت کنید. در واقع، با استفاده از ORM، می‌توانید داده‌ها را به صورت کلاس‌های شی‌گرا مدل‌سازی کنید و از این طریق به راحتی با پایگاه داده‌ها تعامل داشته باشید.

Entity Framework، به عنوان یک چارچوب ORM برای سی شارپ، این امکان را فراهم می‌کند که شما مدل‌های داده‌ای را به صورت کلاس‌ها (کلاس‌های C#) تعریف کنید که نمایانگر جداول پایگاه داده هستند. این روش از پیچیدگی‌های SQL کاسته و فرآیند کدنویسی را ساده‌تر می‌کند.

مراحل استفاده از Entity Framework

برای استفاده از Entity Framework در پروژه‌ها، مراحل مشخصی وجود دارد که در ادامه به شرح هرکدام پرداخته می‌شود:

1. ایجاد مدل‌های داده‌ای (کلاس‌ها)

اولین قدم در استفاده از EF، ایجاد مدل‌های داده‌ای است. این مدل‌ها به کلاس‌هایی اطلاق می‌شود که نمایان‌گر جداول پایگاه داده هستند. هر کلاس به یک جدول خاص در پایگاه داده اشاره می‌کند و هر ویژگی (property) از کلاس‌ها به یک ستون در جدول معادل است.

2. ایجاد کانتکست (Context)

در EF، کانتکست (Context) یک کلاس است که به عنوان رابط میان مدل‌های داده‌ای و پایگاه داده عمل می‌کند. این کلاس مسئول مدیریت عملیات پایگاه داده، مانند اتصال به پایگاه داده و ذخیره تغییرات است. کانتکست EF باید از کلاس DbContext ارث‌بری کرده و مجموعه‌های مدل‌های داده‌ای را از نوع DbSet<TEntity> تعریف کند.

3. استفاده از LINQ برای عملیات پایگاه داده

پس از تعریف مدل‌ها و کانتکست، برای انجام عملیات‌های مختلف مانند درج (Insert)، به‌روزرسانی (Update)، حذف (Delete) و خواندن (Read) می‌توان از LINQ استفاده کرد. LINQ این امکان را به شما می‌دهد که عملیات‌های پیچیده را به زبان C# و با استفاده از دستورات ساده و خوانا انجام دهید. این به مراتب ساده‌تر و سریع‌تر از نوشتن دستورات SQL به صورت مستقیم است.

مزایای استفاده از Entity Framework

کاهش کدنویسی: با استفاده از EF، نیازی به نوشتن دستورات SQL برای انجام عملیات‌های مختلف نیست. EF به‌طور خودکار SQL را از کد C# شما تولید می‌کند.

مدیریت خودکار ارتباطات پایگاه داده: EF به صورت خودکار عملیات‌های مربوط به اتصال به پایگاه داده و مدیریت تراکنش‌ها را انجام می‌دهد.

استفاده از LINQ: این چارچوب از LINQ پشتیبانی می‌کند که این امکان را می‌دهد که پرس‌و‌جوهای پیچیده را به سادگی بنویسید.

ارتباط با پایگاه داده‌های مختلف: EF از پایگاه داده‌های مختلف (SQL Server، MySQL، PostgreSQL و …) پشتیبانی می‌کند.

مثال عملی

در اینجا یک مثال ساده از نحوه استفاده از Entity Framework برای خواندن داده‌ها از پایگاه داده آورده شده است:

using System;
using System.Linq;
using System.Data.Entity;

public class User
{
    public int UserId { get; set; }
    public string UserName { get; set; }
}

public class ApplicationDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
}

class Program
{
    static void Main()
    {
        // استفاده از کانتکست برای تعامل با پایگاه داده
        using (var context = new ApplicationDbContext())
        {
            // خواندن داده‌ها از جدول Users
            var users = context.Users.ToList();

            // نمایش داده‌های خوانده شده
            foreach (var user in users)
            {
                Console.WriteLine(user.UserName);
            }
        }
    }
}

در این مثال:

مدل داده‌ای User: یک کلاس ساده است که نمایان‌گر جدول Users در پایگاه داده است. هر شیء از این کلاس نمایان‌گر یک رکورد در جدول Users است.
کانتکست ApplicationDbContext: این کلاس که از DbContext ارث‌بری می‌کند، اتصال به پایگاه داده را برقرار کرده و مجموعه‌ای از مدل‌ها را در قالب DbSet<User> فراهم می‌آورد.
LINQ: از LINQ برای خواندن تمامی داده‌ها از جدول Users و نمایش آن‌ها در کنسول استفاده شده است.

عملیات‌های دیگر با Entity Framework

در ادامه به برخی دیگر از عملیات‌هایی که با استفاده از Entity Framework می‌توان انجام داد اشاره می‌کنیم:

1. درج داده‌ها (Insert)

برای درج داده جدید به پایگاه داده، کافی است شیء جدیدی از مدل خود ایجاد کرده و آن را به مجموعه DbSet اضافه کنید. سپس با فراخوانی SaveChanges()، تغییرات به پایگاه داده اعمال می‌شود.

using (var context = new ApplicationDbContext())
{
    var newUser = new User { UserName = "JohnDoe" };
    context.Users.Add(newUser);
    context.SaveChanges();
}

2. به‌روزرسانی داده‌ها (Update)

برای به‌روزرسانی داده‌ها، ابتدا باید شیء مورد نظر را از پایگاه داده خوانده و سپس ویژگی‌های آن را تغییر دهید و در نهایت تغییرات را ذخیره کنید.

using (var context = new ApplicationDbContext())
{
    var user = context.Users.FirstOrDefault(u => u.UserName == "JohnDoe");
    if (user != null)
    {
        user.UserName = "JaneDoe";
        context.SaveChanges();
    }
}

3. حذف داده‌ها (Delete)

برای حذف داده‌ها، کافی است شیء مورد نظر را از مجموعه DbSet حذف کرده و سپس با فراخوانی SaveChanges() آن را از پایگاه داده حذف کنید.

using (var context = new ApplicationDbContext())
{
    var user = context.Users.FirstOrDefault(u => u.UserName == "JaneDoe");
    if (user != null)
    {
        context.Users.Remove(user);
        context.SaveChanges();
    }
}

استفاده از Entity Framework به شما این امکان را می‌دهد که بدون نیاز به نوشتن دستورات SQL پیچیده، عملیات‌های مربوط به پایگاه داده را به راحتی انجام دهید. با استفاده از EF، شما می‌توانید مدل‌های داده‌ای را به‌طور ساده و به صورت شی‌گرا تعریف کرده و عملیات‌های مختلف مانند خواندن، نوشتن، به‌روزرسانی و حذف را با استفاده از LINQ به سادگی انجام دهید. این چارچوب در دنیای توسعه نرم‌افزار بسیار محبوب است و باعث می‌شود که کار با پایگاه داده‌ها بسیار ساده‌تر و کاربرپسندتر شود.

عملیات CRUD (ایجاد، خواندن، به‌روزرسانی و حذف) در پایگاه داده‌ها

عملیات CRUD (Create, Read, Update, Delete) چهار عمل اصلی هستند که به طور رایج برای تعامل با پایگاه داده‌ها استفاده می‌شوند. این عملیات‌ها پایه و اساس بسیاری از برنامه‌های کاربردی هستند که نیاز دارند داده‌ها را در پایگاه داده مدیریت کنند. در هر پایگاه داده، این عملیات‌ها معمولاً با استفاده از زبان‌های پرس‌وجو مانند SQL یا ابزارهایی مانند Entity Framework انجام می‌شوند.

1. ایجاد (Create)

عملیات ایجاد (Create) به معنای درج داده‌های جدید در پایگاه داده است. برای این کار می‌توان از دستورات مختلف استفاده کرد:

در ADO.NET: از دستور SQL INSERT INTO برای اضافه کردن رکورد جدید به یک جدول استفاده می‌شود.
در Entity Framework: می‌توان از متد Add() برای افزودن یک شیء جدید به مجموعه (DbSet) استفاده کرد.
مثال ADO.NET:

string query = "INSERT INTO Users (UserName) VALUES ('JohnDoe')";
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonQuery();

در این مثال، یک کاربر جدید با نام “JohnDoe” به جدول Users اضافه می‌شود.

مثال Entity Framework:

using (var context = new ApplicationDbContext())
{
    var newUser = new User { UserName = "JohnDoe" };
    context.Users.Add(newUser);
    context.SaveChanges();
}

در این مثال، شیء newUser به مجموعه Users اضافه می‌شود و سپس با فراخوانی SaveChanges()، این تغییرات در پایگاه داده اعمال می‌شود.

2. خواندن (Read)

عملیات خواندن (Read) به معنای استخراج داده‌ها از پایگاه داده است. برای این کار نیز روش‌های مختلفی وجود دارد:

در ADO.NET: از دستور SQL SELECT برای خواندن داده‌ها از پایگاه داده استفاده می‌شود.
در Entity Framework: می‌توان از متدهای LINQ مانند ToList(), FirstOrDefault() و غیره برای خواندن داده‌ها از پایگاه داده استفاده کرد.
مثال ADO.NET:

string query = "SELECT UserName FROM Users";
SqlCommand command = new SqlCommand(query, connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine(reader["UserName"].ToString());
}

در این مثال، نام‌های کاربران از جدول Users خوانده می‌شوند و در کنسول چاپ می‌شوند.

مثال Entity Framework:

using (var context = new ApplicationDbContext())
{
    var users = context.Users.ToList();
    foreach (var user in users)
    {
        Console.WriteLine(user.UserName);
    }
}

در این مثال، با استفاده از LINQ، تمامی کاربران از جدول Users خوانده می‌شوند و سپس در کنسول نمایش داده می‌شوند.

3. به‌روزرسانی (Update)

عملیات به‌روزرسانی (Update) برای تغییر مقادیر موجود در پایگاه داده استفاده می‌شود. در این عملیات، معمولاً رکوردی که باید به‌روزرسانی شود با استفاده از یک شناسه یا شرط خاص پیدا می‌شود و سپس مقادیر جدید به آن اعمال می‌شود.

در ADO.NET: از دستور SQL UPDATE برای به‌روزرسانی داده‌ها استفاده می‌شود.
در Entity Framework: پس از خواندن رکورد مورد نظر، می‌توان مقادیر آن را تغییر داد و سپس با استفاده از متد SaveChanges()، تغییرات را در پایگاه داده ذخیره کرد.

مثال ADO.NET:

string query = "UPDATE Users SET UserName = 'JaneDoe' WHERE UserName = 'JohnDoe'";
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonQuery();

در این مثال، نام کاربری JohnDoe به JaneDoe تغییر می‌کند.

مثال Entity Framework:

using (var context = new ApplicationDbContext())
{
    var user = context.Users.FirstOrDefault(u => u.UserName == "JohnDoe");
    if (user != null)
    {
        user.UserName = "JaneDoe";
        context.SaveChanges();
    }
}

در این مثال، کاربری که نامش “JohnDoe” است پیدا شده و نامش به “JaneDoe” تغییر می‌کند. سپس با فراخوانی SaveChanges(), تغییرات در پایگاه داده اعمال می‌شود.

4. حذف (Delete)

عملیات حذف (Delete) برای حذف داده‌ها از پایگاه داده استفاده می‌شود. در این عملیات، یک رکورد یا چندین رکورد از پایگاه داده حذف می‌شود.

در ADO.NET: از دستور SQL DELETE برای حذف رکوردها از پایگاه داده استفاده می‌شود.
در Entity Framework: رکورد مورد نظر ابتدا باید از مجموعه DbSet حذف شود و سپس با استفاده از متد SaveChanges()، تغییرات اعمال شود.

مثال ADO.NET:

string query = "DELETE FROM Users WHERE UserName = 'JaneDoe'";
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonQuery();

در این مثال، رکوردی که نام کاربری آن JaneDoe است از جدول Users حذف می‌شود.

مثال Entity Framework:

using (var context = new ApplicationDbContext())
{
    var user = context.Users.FirstOrDefault(u => u.UserName == "JaneDoe");
    if (user != null)
    {
        context.Users.Remove(user);
        context.SaveChanges();
    }
}

در این مثال، کاربری که نامش “JaneDoe” است پیدا شده و سپس از مجموعه Users حذف می‌شود. پس از آن، با استفاده از SaveChanges(), حذف در پایگاه داده اعمال می‌شود.

عملیات CRUD (Create, Read, Update, Delete) بخش‌های اساسی هر برنامه‌ای هستند که با پایگاه داده‌ها ارتباط دارند. در اینجا، ما نحوه انجام این عملیات‌ها را با استفاده از دو روش محبوب ADO.NET و Entity Framework بررسی کردیم. در ADO.NET، شما باید دستورات SQL را به صورت دستی بنویسید، در حالی که در Entity Framework می‌توانید از امکانات ORM استفاده کرده و عملیات‌های پیچیده را با استفاده از LINQ به سادگی انجام دهید. انتخاب ابزار مناسب بستگی به نیازهای پروژه و سلیقه برنامه‌نویس دارد، اما هر دو روش به شما این امکان را می‌دهند که با پایگاه داده‌ها به شکلی کارآمد و موثر ارتباط برقرار کنید.

انجام عملیات پیچیده با LINQ to SQL و Entity Framework

در هنگام تعامل با پایگاه داده‌ها، گاهی اوقات نیاز داریم که پرس‌و‌جوهای پیچیده‌تری انجام دهیم که شامل فیلتر کردن، مرتب‌سازی، ترکیب چندین جدول و انجام محاسبات باشد. برای انجام این عملیات پیچیده، استفاده از LINQ (Language Integrated Query) در کنار ابزارهایی مانند Entity Framework و LINQ to SQL یکی از بهترین روش‌هاست. LINQ این امکان را فراهم می‌آورد که تمامی این عملیات‌ها را به شکلی ساده و خوانا با استفاده از زبان C# انجام دهیم.

LINQ چیست؟

LINQ یک زبان پرس‌وجو است که به شما اجازه می‌دهد داده‌ها را از منابع مختلفی مانند پایگاه داده‌ها، مجموعه‌ها، آرایه‌ها و حتی فایل‌ها به روش شی‌گرا و در داخل زبان C# مورد پرس‌و‌جو قرار دهید. LINQ کاملاً یکپارچه با زبان C# است و این امکان را می‌دهد که عملیات پرس‌وجو را بدون نیاز به نوشتن SQL پیچیده در قالب دستورات C# انجام دهیم. این ویژگی به خصوص در ترکیب با Entity Framework بسیار مفید است.

استفاده از LINQ در Entity Framework

در Entity Framework، LINQ به شما این امکان را می‌دهد که با داده‌ها به شیوه‌ای شی‌گرا و راحت تعامل کنید. شما می‌توانید از LINQ برای انجام عملیات‌های مختلفی مانند:

فیلتر کردن داده‌ها (Filtering): با استفاده از شرط‌های خاص داده‌ها را فیلتر کنید.
مرتب‌سازی داده‌ها (Sorting): داده‌ها را بر اساس یک یا چند فیلد مرتب کنید.
انتخاب داده‌ها (Selecting): تنها بخشی از داده‌ها را انتخاب کرده و یا آن‌ها را تغییر دهید.
اتصال جداول (Joining): جداول مختلف را به یکدیگر متصل کرده و داده‌ها را از آن‌ها استخراج کنید.
گروه‌بندی داده‌ها (Grouping): داده‌ها را بر اساس یک ویژگی خاص گروه‌بندی کنید.
LINQ با استفاده از روش‌های ساده و قابل فهم، به شما این امکان را می‌دهد که همه این عملیات‌ها را بدون نیاز به نوشتن دستورات پیچیده SQL انجام دهید.

مثال‌هایی از عملیات پیچیده با LINQ

1. فیلتر کردن داده‌ها با Where

شما می‌توانید با استفاده از Where در LINQ، داده‌هایی را که بر اساس شرایط خاصی فیلتر شده‌اند، دریافت کنید. مثلاً می‌توانیم تمامی کاربران با نام‌های شروع‌شده با حرف “J” را فیلتر کنیم:

using (var context = new ApplicationDbContext())
{
    var filteredUsers = context.Users
                                .Where(u => u.UserName.StartsWith("J"))
                                .ToList();

    foreach (var user in filteredUsers)
    {
        Console.WriteLine(user.UserName);
    }
}

در این مثال:

از Where برای فیلتر کردن کاربران با نام‌هایی که با “J” شروع می‌شوند استفاده شده است.
نتیجه در یک لیست ذخیره می‌شود و سپس برای هر کاربر، نام آن در کنسول چاپ می‌شود.

2. مرتب‌سازی داده‌ها با OrderBy

LINQ به شما این امکان را می‌دهد که داده‌ها را به راحتی مرتب کنید. برای مرتب‌سازی داده‌ها می‌توانید از OrderBy (برای مرتب‌سازی صعودی) یا OrderByDescending (برای مرتب‌سازی نزولی) استفاده کنید.

 

using (var context = new ApplicationDbContext())
{
    var sortedUsers = context.Users
                             .Where(u => u.UserName.StartsWith("J"))
                             .OrderBy(u => u.UserName)  // مرتب‌سازی بر اساس نام
                             .ToList();

    foreach (var user in sortedUsers)
    {
        Console.WriteLine(user.UserName);
    }
}

در این مثال:

ابتدا کاربران با نام‌هایی که با “J” شروع می‌شوند فیلتر می‌شوند.
سپس با استفاده از OrderBy, کاربران بر اساس نام کاربری به ترتیب صعودی مرتب می‌شوند.

3. انتخاب فیلدهای خاص با Select

گاهی اوقات شما تنها نیاز به برخی از ویژگی‌های یک شیء دارید و نیازی به بازگشت تمام داده‌های آن ندارید. برای این کار می‌توانید از Select در LINQ استفاده کنید.

using (var context = new ApplicationDbContext())
{
    var userNames = context.Users
                           .Where(u => u.UserName.StartsWith("J"))
                           .Select(u => u.UserName)  // انتخاب فقط نام کاربری
                           .ToList();

    foreach (var name in userNames)
    {
        Console.WriteLine(name);
    }
}

در این مثال:

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

4. اتصال جداول با Join

اگر نیاز دارید داده‌ها را از چند جدول مختلف به هم متصل کنید، می‌توانید از Join در LINQ استفاده کنید. این روش مشابه با عمل JOIN در SQL است.

using (var context = new ApplicationDbContext())
{
    var usersWithOrders = from u in context.Users
                          join o in context.Orders on u.UserId equals o.UserId
                          select new { u.UserName, o.OrderId };

    foreach (var item in usersWithOrders)
    {
        Console.WriteLine($"{item.UserName} - Order ID: {item.OrderId}");
    }
}

در این مثال:

داده‌های کاربران با اطلاعات سفارش‌های مربوطه با استفاده از join متصل می‌شوند.
نتایج نمایش داده می‌شود و شامل نام کاربر و شماره سفارش مربوطه است.

5. گروه‌بندی داده‌ها با GroupBy

اگر نیاز به گروه‌بندی داده‌ها دارید، می‌توانید از GroupBy استفاده کنید. این عملیات معمولاً برای دسته‌بندی داده‌ها براساس یک ویژگی خاص مفید است.

using (var context = new ApplicationDbContext())
{
    var groupedUsers = context.Users
                              .GroupBy(u => u.UserName.Substring(0, 1))  // گروه‌بندی بر اساس حرف اول نام کاربری
                              .ToList();

    foreach (var group in groupedUsers)
    {
        Console.WriteLine($"Users starting with {group.Key}:");
        foreach (var user in group)
        {
            Console.WriteLine(user.UserName);
        }
    }
}

در این مثال:

کاربران بر اساس حرف اول نام کاربری‌شان گروه‌بندی می‌شوند.
سپس برای هر گروه، کاربران مربوطه چاپ می‌شوند.

LINQ به SQL و Entity Framework امکانات فوق‌العاده‌ای برای انجام عملیات پیچیده بر روی داده‌ها فراهم می‌کنند. با استفاده از LINQ، می‌توانیم داده‌ها را با استفاده از دستورات ساده و خوانا فیلتر، مرتب‌سازی، گروه‌بندی و ترکیب کنیم. این ابزارها به ما اجازه می‌دهند که بدون نیاز به نوشتن دستورات پیچیده SQL، پرس‌و‌جوهای پیچیده‌ای را به راحتی و به صورت کاملاً یکپارچه با کد C# انجام دهیم.

نتیجه‌گیری

در این مقاله، با مفاهیم و ابزارهای مختلف برای کار با پایگاه داده‌ها در سی شارپ آشنا شدیم. از اتصال به پایگاه داده‌ها با استفاده از ADO.NET گرفته تا استفاده از Entity Framework برای پیاده‌سازی ORM، تمامی جنبه‌های اساسی کار با داده‌ها در این زبان برنامه‌نویسی پوشش داده شد. همچنین با انجام عملیات‌های CRUD و بهره‌برداری از LINQ برای پرس‌وجوهای پیچیده‌تر، فهمیدیم که سی شارپ ابزارهای قدرتمندی برای تعامل با پایگاه داده‌ها ارائه می‌دهد.

در نهایت، تسلط بر این ابزارها و تکنیک‌ها به شما این امکان را می‌دهد که به راحتی داده‌ها را ذخیره، مدیریت و پردازش کنید. به کمک کار با پایگاه داده‌ها در سی شارپ، می‌توانید برنامه‌هایی توسعه دهید که به طور مؤثر و کارآمد با پایگاه‌های داده ارتباط برقرار کنند و داده‌ها را به شکلی بهینه مدیریت نمایند.

آموزش کار با پایگاه داده‌ها در سی شارپ

دیدگاه های شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *