Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq从链接表中获取用户名_C#_Asp.net_Linq - Fatal编程技术网

C# 使用Linq从链接表中获取用户名

C# 使用Linq从链接表中获取用户名,c#,asp.net,linq,C#,Asp.net,Linq,我有一个名为tblAuditRecord的表,其中一个字段记录作为审计员登录的用户ID。现在,在检索记录以供查看时,我希望检索完成审核的实际用户名,而不是用户ID。在查看单个审核记录时,我成功地做到了这一点,但我正在努力使其能够检索审核列表 var tblauditrecord = db.tblAuditRecords.OrderByDescending(e => e.dateOfAudit) 上述代码行当前返回审计列表,tolist扩展方法添加在返回视图代码行的点上 有人能告诉我如何通

我有一个名为tblAuditRecord的表,其中一个字段记录作为审计员登录的用户ID。现在,在检索记录以供查看时,我希望检索完成审核的实际用户名,而不是用户ID。在查看单个审核记录时,我成功地做到了这一点,但我正在努力使其能够检索审核列表

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)