🔷 What is LINQ?
LINQ (Language Integrated Query) is a .NET feature that allows you to query collections (like arrays, lists, and database entities) in a SQL-like or method-chaining syntax directly within C# code.
🔷 Types of LINQ Syntax:
Query Syntax (SQL-like)
Method Syntax (Fluent/Chaining)
Mixed Syntax (Less common)
🔷 Common LINQ Operations
Operation Example (Method Syntax)
Where .Where(x => x.Age > 18)
Select .Select(x => x.Name)
OrderBy .OrderBy(x => x.Name)
GroupBy .GroupBy(x => x.Department)
Join .Join(..., ..., ..., ...)
Any, All, Count, FirstOrDefault, Take, Skip, etc.
🔷 ASP.NET Core MVC Example: Student Management System
Step 1: Setup Entity
Models/Student.cs
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Marks { get; set; }
public string Subject { get; set; }
}
Step 2: Create a Fake List for LINQ Demo
Controllers/StudentController.cs
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using YourApp.Models;
public class StudentController : Controller
{
private List<Student> GetStudents()
{
return new List<Student>
{
new Student { Id = 1, Name = "Amit", Marks = 85, Subject = "Math" },
new Student { Id = 2, Name = "Priya", Marks = 92, Subject = "Science" },
new Student { Id = 3, Name = "Rahul", Marks = 78, Subject = "English" },
new Student { Id = 4, Name = "Sneha", Marks = 88, Subject = "Math" }
};
}
public IActionResult Index()
{
var students = GetStudents();
// LINQ Examples:
var highScorers = students.Where(s => s.Marks > 80).ToList();
var groupedBySubject = students
.GroupBy(s => s.Subject)
.Select(g => new
{
Subject = g.Key,
AverageMarks = g.Average(x => x.Marks),
Students = g.ToList()
});
ViewBag.HighScorers = highScorers;
ViewBag.GroupedData = groupedBySubject;
return View(students);
}
}
Step 3: View Display with Razor
Views/Student/Index.cshtml
<h2>All Students</h2>
<table class="table">
<thead>
<tr><th>Name</th><th>Marks</th><th>Subject</th></tr>
</thead>
<tbody>
@foreach(var student in Model)
{
<tr>
<td>@student.Name</td>
<td>@student.Marks</td>
<td>@student.Subject</td>
</tr>
}
</tbody>
</table>
<h3>🎯 High Scorers (Marks > 80)</h3>
<ul>
@foreach(var s in ViewBag.HighScorers)
{
<li>@s.Name - @s.Marks</li>
}
</ul>
<h3>📚 Grouped By Subject with Average Marks</h3>
@foreach(var g in ViewBag.GroupedData)
{
<h4>@g.Subject - Avg: @g.AverageMarks</h4>
<ul>
@foreach(var s in g.Students)
{
<li>@s.Name (@s.Marks)</li>
}
</ul>
}
Join Operation in LINQ:
A Student is enrolled in a Course.
We want to join Student and Course to show combined info like:
Student Name, Course Name, and Marks.
🔷 Step-by-Step Example
🧩 Models
Models/Student.cs
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Marks { get; set; }
public int CourseId { get; set; } // Foreign Key
}
Models/Course.cs
csharp
Copy
Edit
public class Course
{
public int Id { get; set; }
public string CourseName { get; set; }
}
📋 Create Sample Data in Controller
Controllers/JoinDemoController.cs
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using YourApp.Models;
public class JoinDemoController : Controller
{
private List<Student> GetStudents()
{
return new List<Student>
{
new Student { Id = 1, Name = "Amit", Marks = 85, CourseId = 1 },
new Student { Id = 2, Name = "Priya", Marks = 92, CourseId = 2 },
new Student { Id = 3, Name = "Rahul", Marks = 78, CourseId = 1 },
new Student { Id = 4, Name = "Sneha", Marks = 88, CourseId = 3 }
};
}
private List<Course> GetCourses()
{
return new List<Course>
{
new Course { Id = 1, CourseName = "Math" },
new Course { Id = 2, CourseName = "Science" },
new Course { Id = 3, CourseName = "English" }
};
}
public IActionResult Index()
{
var students = GetStudents();
var courses = GetCourses();
// 🔗 LINQ Join
var result = from s in students
join c in courses on s.CourseId equals c.Id
select new
{
StudentName = s.Name,
CourseName = c.CourseName,
Marks = s.Marks
};
ViewBag.JoinedData = result.ToList();
return View();
}
}
🖥️ View
Views/JoinDemo/Index.cshtml
html
Copy
Edit
<h2>Student-Course Join Example</h2>
<table class="table">
<thead>
<tr>
<th>Student Name</th>
<th>Course</th>
<th>Marks</th>
</tr>
</thead>
<tbody>
@foreach (var item in ViewBag.JoinedData)
{
<tr>
<td>@item.StudentName</td>
<td>@item.CourseName</td>
<td>@item.Marks</td>
</tr>
}
</tbody>
</table>
🔁 Join Using Method Syntax
If you prefer method syntax:
var result = students.Join(courses,
s => s.CourseId,
c => c.Id,
(s, c) => new
{
StudentName = s.Name,
CourseName = c.CourseName,
Marks = s.Marks
});
Comments
Post a Comment
POST Answer of Questions and ASK to Doubt