asp.net core mvc进行多表查询
时间: 2023-10-07 21:14:03 浏览: 47
在 ASP.NET Core MVC 中进行多表查询,可以使用 Entity Framework Core 来实现。
首先,定义好每个表的实体类,并通过 DbContext 来建立它们之间的关系。例如,在一个订单管理系统中,一个订单可能对应多个订单项,而一个订单项又对应一个商品,可以定义以下实体类:
```csharp
public class Order
{
public int Id { get; set; }
public DateTime OrderDate { get; set; }
public ICollection<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
public int Id { get; set; }
public int OrderId { get; set; }
public int ProductId { get; set; }
public int Quantity { get; set; }
public decimal Price { get; set; }
public Order Order { get; set; }
public Product Product { get; set; }
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public ICollection<OrderItem> OrderItems { get; set; }
}
public class OrderContext : DbContext
{
public DbSet<Order> Orders { get; set; }
public DbSet<OrderItem> OrderItems { get; set; }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<OrderItem>()
.HasOne(p => p.Order)
.WithMany(p => p.OrderItems)
.HasForeignKey(p => p.OrderId);
modelBuilder.Entity<OrderItem>()
.HasOne(p => p.Product)
.WithMany(p => p.OrderItems)
.HasForeignKey(p => p.ProductId);
}
}
```
然后,在查询时,可以通过 Include 方法来加载关联的实体类,并通过 Where 方法进行筛选。例如,查询订单中商品名称为 "iPhone" 的订单项:
```csharp
using Microsoft.EntityFrameworkCore;
var orderContext = new OrderContext();
var orderItems = await orderContext.OrderItems
.Include(p => p.Order)
.Include(p => p.Product)
.Where(p => p.Product.Name == "iPhone")
.ToListAsync();
```
这样就可以得到所有符合条件的订单项,并且它们的关联实体类也已经加载好了。