C# 使用Linq从链接表中获取用户名
我有一个名为tblAuditRecord的表,其中一个字段记录作为审计员登录的用户ID。现在,在检索记录以供查看时,我希望检索完成审核的实际用户名,而不是用户ID。在查看单个审核记录时,我成功地做到了这一点,但我正在努力使其能够检索审核列表C# 使用Linq从链接表中获取用户名,c#,asp.net,linq,C#,Asp.net,Linq,我有一个名为tblAuditRecord的表,其中一个字段记录作为审计员登录的用户ID。现在,在检索记录以供查看时,我希望检索完成审核的实际用户名,而不是用户ID。在查看单个审核记录时,我成功地做到了这一点,但我正在努力使其能够检索审核列表 var tblauditrecord = db.tblAuditRecords.OrderByDescending(e => e.dateOfAudit) 上述代码行当前返回审计列表,tolist扩展方法添加在返回视图代码行的点上 有人能告诉我如何通
var tblauditrecord = db.tblAuditRecords.OrderByDescending(e => e.dateOfAudit)
上述代码行当前返回审计列表,tolist扩展方法添加在返回视图代码行的点上
有人能告诉我如何通过匹配AuditorID和UserId来获取UserProfile表中的用户名吗
我尝试使用.include作为下面的代码
var tblauditrecord = db.tblAuditRecords.Include(e => e.UserProfileGetUsername);
但出现错误mscorlib.dll中发生了类型为“System.Reflection.TargetInvocationException”的异常,但未在用户代码中处理,该代码从这一行代码指向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; }
}
var query=来自userprofiles中的u
在u.UserID等于a.auditorID的审核中加入a
选择u.UserName
我不知道UserProfile的字段,因此如果您使用的命名方案与tblAuditRecord中相同,那么它们可能是.userID。用户配置文件也可以是tblUserProfile
这段代码需要两个变量,一个是UserProfile userprofiles类型,另一个是tblAuditRecord审计类型,每个类都有完整的表。然后根据匹配的ID执行内部联接,并从结果表中检索所需用户名的值。您没有太多选择,这取决于您对结果的期望:
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,
...,
;
我通过在控制器类中使用.include找到了解决方案
var tblauditrecord = db.tblAuditRecords.Include(e => e.UserProfileGetUsername);
在我的审计表模型中,我添加了以下内容
public int auditorID { get; set; }
[ForeignKey("auditorID")]
public virtual UserProfile UserProfileGetUsername { get; set; }
在我的razor视图中,我这样调用用户名:
@Html.DisplayFor(modelItem => item.UserProfileGetUsername.UserName)
您能发布表(如列/键等)以便人们可以看到底层数据结构吗?您好,谢谢,但是我需要从审核表中选择所有字段,并从userprofile表中选择用户名。我以前尝试过这种方法,但它没有过滤到我的razor页面。好的,然后你需要这样做:如果你想为审计中的每个记录使用UserProfile中的相应用户名,你应该这样做:选择new{a,u.username};这样,您就可以在与用户名相关的审核中选择整个记录。这将创建一个匿名类型,其中包含类型为audits的对象和类型为string username的对象对不起,重复发布,无法编辑prev Comments谢谢,对不起,但是我可以问一下如何通过降序添加顺序。我已经添加了这段代码,但在db.UserProfiles中不断从u得到一个错误var tblauditrecord=在db.tblAuditRecords中加入a在u.UserId上等于a.auditorID选择新的{a,u.UserName};tblauditrecord.OrderByDowneringE=>e.a.dateOfAudit;只需添加:orderby a.dateOfAudit,在选择之前降序。
@Html.DisplayFor(modelItem => item.UserProfileGetUsername.UserName)