You need to enable JavaScript to run this app. 如何关联两张表查询指定ResellerId的全部数据并解决LINQ单行返回问题
优惠活动
大模型
产品
解决方案
定价
更多

如何关联两张表查询指定ResellerId的全部数据并解决LINQ单行返回问题

问题原因

你当前查询仅返回一行数据是因为First()方法的作用就是仅提取查询结果集中的第一条记录,同时你定义的方法返回值为单个RateSheetModel类型,天然无法承载多条数据。

解决方法

1. 仅获取 WholesaleRateSheet 表对应ResellerId的全部数据

修改方法返回值为集合类型,同时将查询结尾的First()替换为ToList(),示例代码如下:

// 返回值修改为List集合
public List<RateSheetModel> GetRateSheet(int resellerId)
{
    // 用ToList()获取所有匹配ResellerId的记录
    var rateSheetList = _Context.WholesaleRateSheet
                                .Where(r => r.ResellerId == resellerId)
                                .ToList();
    // 数据库实体映射到接口返回Model,按需填写对应字段
    return rateSheetList.Select(r => new RateSheetModel
    {
        ResellerId = r.ResellerId,
        RateSheetId = r.RateSheetId,
        CountryCode = r.CountryCode,
        Description = r.Description,
        Peak = r.Peak,
        // 其余需要返回的字段逐一映射
    }).ToList();
}

如果你需要直接返回数据库实体,也可以直接将返回值改为List<WholesaleRateSheet>,跳过映射步骤,不过不建议在对外API中直接暴露数据库实体结构。

2. 关联查询两张表的全部关联数据

你提到两张表存在关联关系,关联键为ResellerId和RateSheetMarkupId,如果需要同时返回两张表的字段,可使用连表查询:

public List<RateSheetModel> GetRateSheet(int resellerId)
{
    var joinResult = (from r in _Context.WholesaleRateSheet
                      join m in _Context.WholesaleRateSheetMarkup
                      on new { r.ResellerId, r.RateSheetMarkupId } equals new { m.ResellerId, m.RateSheetMarkupId }
                      where r.ResellerId == resellerId
                      select new
                      {
                          r.ResellerId,
                          r.RateSheetId,
                          r.CountryCode,
                          r.Description,
                          r.Peak,
                          m.RatesheetName,
                          m.RateSheetMarkupId
                          // 按需添加两张表需要返回的字段
                      }).ToList();
    // 映射到返回Model
    return joinResult.Select(item => new RateSheetModel
    {
        ResellerId = item.ResellerId,
        RateSheetId = item.RateSheetId,
        CountryCode = item.CountryCode,
        Description = item.Description,
        Peak = item.Peak,
        RatesheetName = item.RatesheetName,
        // 其余字段映射
    }).ToList();
}

内容的提问来源于stack exchange,提问作者IT Forward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 12:24:03