首页 > 解决方案 > linq 异步调用以映射到一个对象 2 个具有外键的表

问题描述

我知道标题可能听起来很糟糕,但这是我能想到的最好的。(也是我在堆栈上的第一个问题:P)

我已经反向设计了一个数据库,并且我有一些看起来像这样的类:

public class Orders
{
    public int Id { get; set; }
    public int LocationId { get; set; }
    ...
    public Locations Location { get; set; }
    public Users User { get; set; }
}
public class Locations 
{
    public int Id { get; set; }
    ...
}

我还有 2 个带有外键“LocationId”的 SQL 表“订单”和“位置”

如果我想像这样使用 LINQ 进行选择:

var ordersResult = await _context.Orders.Where(o => <some condition>).ToListAsync();

然后它将用所有属性填充我的对象,但 Location 对象属性将为空。这是有道理的,因为我没有加入或类似的事情。

我不知道如何编写 LINQ 语句,以便它只在一次异步调用中填充整个对象,而无需多次调用数据库。

我也试过这样做:

var ordersResult = await _context.Orders.Join(_context.Locations,
                orders => orders.LocationId,
                locations=> locations.Id,
                (orders, locations) => new { Orders = orders, Locations = locations })
            .Where(orders_users => <some condition>)
            .Select(o => o.Orders)
            .ToListAsync();

但这仍然给我的 Locations 属性一个空值。

在此先感谢您的帮助!

标签: c#asp.netlinqapiweb

解决方案


使用包括

await _context.Orders.Include("Location").Where(o => <some condition>).ToListAsync();

推荐阅读