我有一个名为tblAuditRecord的表,其中一个字段将登录的用户ID记录为审计员。现在,当检索要查看的记录时,我想要检索完成审核的实际用户名而不是用户ID。我在查看单个审计记录时已经成功地设法完成了这项工作,但是我很难将其用于检索审计列表。
var tblauditrecord = db.tblAuditRecords.OrderByDescending(e => e.dateOfAudit)
上面的代码行当前返回审计列表(在代码的返回视图行添加了tolist扩展方法。
任何人都可以建议如何通过将AuditorID与UserId相匹配来获取UserProfile表来获取UserName。
我尝试使用.include作为下面的代码
var tblauditrecord = db.tblAuditRecords.Include(e => e.UserProfileGetUsername);
但出现错误"类型' System.Reflection.TargetInvocationException'发生在mscorlib.dll中但未在用户代码中处理"它从这行代码
指向InitialiseSimplemembershipAttribute.cs文件LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
如果有人能提供解决方案,那就太棒了(我打赌我这让它变得比它需要的更复杂)
下面添加的表格模型代码
[Table("tblAuditRecord")]
public class tblAuditRecord
{
[Key]
public int auditId { get; set; }
[Column(TypeName = "datetime2")]
public DateTime dateOfAudit { get; set; }
[StringLength(50)]
public string fleetNumber { get; set; }
[StringLength(50)]
public string nonFleetNumber { get; set; }
//public string auditType { get; set; } check about this one
[StringLength(200)]
public string bodyShopName { get; set; }
[StringLength(20)]
public string vehicleReg { get; set; }
[StringLength(30)]
public string vehicleMake { get; set; }
[StringLength(50)]
public string vehicleModel { get; set; }
[StringLength(150)]
public string vehicleAdditionalDetail { get; set; }
public int numberOfDoors { get; set; }
[StringLength(20)]
public string vehicleMileage { get; set; }
public int auditorID { get; set; }
[ForeignKey("UserId")]
public virtual UserProfile UserProfileGetUsername { get; set; }
public string auditorSignature { get; set; }
[Column(TypeName = "datetime2")]
public Nullable<DateTime> dateOfSignature { get; set; }
public bool machinePolished { get; set; }
public bool vehicleDriven { get; set; }
public string bodyShopContactName { get; set; }
public string bodyShopSignature { get; set; }
[Column(TypeName = "datetime2")]
public Nullable<DateTime> dateOfBodyShopSignature { get; set; }
public string additionalInformation { get; set; }
[Required]
[Display(Name = "Email Address")]
public string EmailAddress { get; set; }
public virtual ICollection<tblDamageLine> tblDamageLines { get; set; }
}
用户个人资料表
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
}
答案 0 :(得分:0)
var query =来自u的userprofiles 加入审计u.UserID等于a.auditorID 选择u.UserName;
我不知道UserProfile的字段,因此如果您使用与tblAuditRecord中相同的命名方案,它们可能是.userID。 UserProfile也可以是tblUserProfile。
此代码需要2个变量,一个类型为UserProfile(userprofiles),另一个为tblAuditRecord(审计),每个类都包含整个表。然后根据匹配的ID执行内部联接,并从结果表中检索所需的值(用户名)。
答案 1 :(得分:0)
您没有太多选择,这取决于您对结果的期望:
var query = FROM
u IN userprofiles
JOIN
a in audits
ON
u.UserID EQUALS a.auditorID
SELECT
u.UserName,
a.dateOfAudit,
a.fleetNumber ,
a.nonFleetNumber ,
a.auditType,
a.bodyShopName,
...,
;
答案 2 :(得分:0)
我通过在我的控制器类中使用.include找到了解决方案
var tblauditrecord = db.tblAuditRecords.Include(e => e.UserProfileGetUsername);
并在我的审计表模型中添加了以下内容
public int auditorID { get; set; }
[ForeignKey("auditorID")]
public virtual UserProfile UserProfileGetUsername { get; set; }
在我的剃刀视图中,我随后调用了用户名:
@Html.DisplayFor(modelItem => item.UserProfileGetUsername.UserName)