【发布时间】:2020-09-20 05:36:43
【问题描述】:
我看过一些类似的帖子,但我无法弄清楚如何解决我的问题。我在 ASP.NET Core 项目中有三个表。在我的 Prescriptions 和 Prescribers 表中有 one-to-many 关系,在我的 Prescribers 和 Marketers 表中有 one-to-many 关系。我想查询 Prescriptions 表并获取外键 PrescriberId,然后查询 Prescribers 表并获取外键 MarketerId 并返回 MarketerId。到目前为止,我有这个 linq
'var presciber = from p in _context.Prescriptions
join f in _context.Prescribers on p.PrescriberId equals f.Id
join m in _context.Marketers on f.MarketerId equals m.Id
where p.FolderStatusId == 3
select new { m.Id };
我希望能够使用.Include,这样我就可以包含来自Marketers 表的其他数据,因此我可以显示Marketer Name,而不是显示MarketerId,而不是在视图中显示为空。所以想把这个查询转换成方法,这个我试过了
var prescriber = _context.Prescriptions
.Join(_context.Prescribers,
p => p.PrescriberId,
f => f.Id,
(p, f) => new { Prescriptions = p, Prescribers = f })
.Join(_Context.Marketers,
f => f.Prescribers.MarketerId,
m => m.Id,
(f, m) => new { Prescribers = f, Marketers = m })
.Where(d => d.FolderStatusId == 3);//This line gets the error
在Where 子句中我收到错误
<anonmyous type: <anonymous type:Prescription Prescriptions, Prescriber Prescribers> Prescribers, Marketer Marketers> does not contain a definition for FolderStatusId
这是我的课程
public class Prescriptions {
public int Id {get;set;}
public int FolderStatusId {get;set;}
public int PrescriberId { get; set; }
public string Medication { get; set; }
public virtual Prescriber Prescriber { get; set; }
}
这里是 Prescribers 类
public class Prescriber {
public int Id { get; set; }
public int MarketerId { get; set; }
public string Name { get; set; }
public virtual Marketer Marketer {get;set;}
public virtual ICollection<Prescription> Prescriptions { get; set; }
}
这是营销人员类
public class Marketer {
public int Id { get;set; }
public string Name { get; set; }
public virtual ICollection<Prescriber> Prescribers { get; set; }
}
我的问题是如何更正此 Linq 方法以及在哪里添加 .Include?
【问题讨论】:
-
您能否添加您的实体定义。
-
Include用于导航属性而不是其他列,因此您只需在选择中添加所需的所有列。说到导航属性,我建议考虑使用它们而不是 Joins coding.abel.nu/2012/06/dont-use-linqs-join-navigate -
我添加了模型类,我将查看导航
-
你有导航属性,那你为什么
join? -
我愿意学习任何更好的解决方案。我使用了
join,因为我认为这是要走的路,但我不一定仅限于join