如何关联两张表查询指定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
相关产品推荐
相关产品推荐

