LINQ (Language Integrated Query) 是.NET框架中的一组技术,它允许开发者使用类似SQL的语法直接在C#或VB.NET代码中查询数据。当需要从多个表中获取记录时,LINQ提供了多种方式来实现表连接操作。
var query = from student in db.Students
join course in db.Courses on student.CourseId equals course.Id
select new {
student.Name,
CourseName = course.Name
};
var query = from student in db.Students
join course in db.Courses on student.CourseId equals course.Id into studentCourses
from sc in studentCourses.DefaultIfEmpty()
select new {
student.Name,
CourseName = sc == null ? "No Course" : sc.Name
};
如果实体间有关联关系,可以直接使用导航属性:
var query = from student in db.Students
select new {
student.Name,
CourseName = student.Course.Name
};
var query = from order in db.Orders
join customer in db.Customers on order.CustomerId equals customer.Id
join product in db.Products on order.ProductId equals product.Id
select new {
OrderId = order.Id,
CustomerName = customer.Name,
ProductName = product.Name,
OrderDate = order.OrderDate
};
select *
原因:可能缺少适当的索引或查询过于复杂
解决:
原因:左外连接中未处理null情况
解决:
DefaultIfEmpty()
原因:实体间有双向导航属性
解决:
[JsonIgnore]
标记不需要的属性// 获取每个部门的员工数量及平均工资
var departmentStats = from dept in db.Departments
join emp in db.Employees on dept.Id equals emp.DepartmentId into deptEmps
select new {
DepartmentName = dept.Name,
EmployeeCount = deptEmps.Count(),
AvgSalary = deptEmps.Average(e => e.Salary)
};
通过掌握这些LINQ多表查询技术,可以高效地从关系数据库中获取和处理关联数据。