我之前在向查询中添加连接时得到了一些帮助。我现在意识到我实际上需要在同一个查询中添加多个连接,但是我尝试了很多方法(基于原始连接)但不断出错。
我有一个名为 SchemeName 的模型 -
namespace TRS.Models
{
public class SchemeName
{
[Key]
public int SchemeNameID { get; set; }
[Display(Name = "Scheme Name")]
public string Name { get; set; }
public virtual ICollection<Benefit> Benefits { get; set; }
}
}
以及多种员工福利模型,例如以下两个,每个模型都有 SchemeID -
namespace TRS.Models
{
public class Pension
{
[Key]
public string UserName { get; set; }
public bool PensionRequired { get; set; }
public int PensionSchemeNameID { get; set; }
public int PensionProviderID { get; set; }
public int PensionBenefitLevelID { get; set; }
public decimal PensionEmployerCost { get; set; }
public decimal PensionEmployeeCost { get; set; }
public virtual PensionBenefitLevel PensionBenefitLevel { get; set; }
[Required]
public virtual User User { get; set; }
}
}
namespace TRS.Models
{
public class LifeAssurance
{
[Key]
public string UserName { get; set; }
public bool LifeAssuranceRequired { get; set; }
public int LifeAssuranceSchemeNameID { get; set; }
public int LifeAssuranceProviderID { get; set; }
public string LifeAssuranceBenefitLevel { get; set; }
public decimal LifeAssuranceEmployerCost { get; set; }
public decimal LifeAssuranceEmployeeCost { get; set; }
[Required]
public virtual User User { get; set; }
}
}
在我的控制器中,我有以下内容 -
var trs = db.Users
.Join(db.SchemeNames,
user => user.Pension.PensionSchemeNameID,
schemeName => schemeName.SchemeNameID,
(user, schemeName) => new { User = user, SchemeName = schemeName })
.Where(a => UserIDs.Contains(a.User.UserName))
.Select(a => new TRSViewModel
{
UserName = a.User.UserName,
FirstName = a.User.UserDetails.FirstName,
LastName = a.User.UserDetails.LastName,
Salary = a.User.UserDetails.Salary,
PensionSchemeName = a.SchemeName.Name,
这对于显示 PensionSchemeName 非常有用,但我还需要显示 LifeAssuranceSchemeName(和其他),但正如我所提到的,不断出现错误。我想我只需要添加一个带有 LifeAssuranceSchemeName 详细信息的附加连接,所以我尝试添加 -
var trs = db.Users
.Join(db.SchemeNames,
user => user.Pension.PensionSchemeNameID,
schemeName => schemeName.SchemeNameID,
(user, schemeName) => new { User = user, SchemeName = schemeName })
.Join(db.SchemeNames,
la => la.Pension.PensionSchemeNameID,
schemeName => schemeName.SchemeNameID,
(user, schemeName) => new { User = user, SchemeName = schemeName })
.Where(a => UserIDs.Contains(a.User.UserName))
.Select(a => new TRSViewModel
但这给了我一个错误-
错误 10“AnonymousType#1”不包含“Pension”的定义,并且找不到接受“AnonymousType#1”类型的第一个参数的扩展方法“Pension”(您是否缺少 using 指令或程序集引用?)
知道如何添加这些额外的联接吗?