我有两个小时的类似问题,我用我的完整代码解释。
所以,看看它是我的示例代码
我有一个名为Employee
的类,其中包含一些属性
我想将一些值设置为我的类属性,就像这样
Employee obj = new Employee()
{
userName="aaa@aa.com",
email=userName
}
它引发了错误。 The user name does not exist in this context
。
我知道可以这样做
Employee obj = new Employee()
obj.userName="aaa@aa.com",
obj.email=userName
但我不想要它。请帮助我如何将prev property分配给我的下一个房产。
实际上我在LINQ查询选择函数中使用了这个类,所以我无法全局分配对象。
这是我的完整原始代码
*PersonalRequestModel model = new PersonalRequestModel();
model = (from personal in this.travelContext.RecruitmentJobs
join jobdesc in this.travelContext.JobDescriptions on personal.id equals jobdesc.recruitmentJobId into job
from jobd in job.DefaultIfEmpty()
where personal.id == modelId
// where personal.id == modelId
select new
{
gjobdescription = jobd,
gpersonal = personal
}).GroupBy(x => x.gpersonal.id)
.Select(personalother => new PersonalRequestModel
{
jobdescrip = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gjobdescription,
recuritmentjob = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal,
//recuritmentjob = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal,
personalviewdetail = new PersonalRequestDisplayModel
{
Gender = personalother.FirstOrDefault(x => x.gjobdescription.recruitmentJobId == personalother.Key).gjobdescription.gender,
TypeOfVacancy = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.typeOfVacancy,
newOrReplacement = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.newOrReplacement,
Designation = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.designation,
DateOfRequest = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.dateOfRequest,
HeadCount = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.headcount,
division = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.division,
HiringDepartment = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.hiringDepartment,
budgetorNonbudget = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.budgetorNonbudget,
Qualificationdesc = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.educationalQualification,
expectedDateOfJoin = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.expectedDateOfJoin,
ReasonForRequest = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.reason,
noofcandiate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.noofCandidate,
workexp = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.workExperience,
eduqual = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.educationalQualification,
//isReplacementEmpNo = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.isReplacementEmpNo,
// isReplacementName = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.isReplacementEmpNo,
isTemporaryPeriod = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.isTemporaryPeriod,
hrApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.hrApprovalStatus,
hrApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.hrApprovalDate,
hrApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.hrApprovalRemarks,
level2ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level2ApprovalStatus,
level2ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level2ApprovalDate,
level2ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level2ApprovalRemarks,
level3ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level3ApprovalStatus,
level3ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level3ApprovalDate,
level3ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level3ApprovalRemarks,
h1ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h1ApprovalStatus,
h1ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h1ApprovalDate,
h1ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h1ApprovalRemarks,
h2ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h2ApprovalStatus,
h2ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h2ApprovalDate,
h2ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h2ApprovalRemarks,
h3ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h3ApprovalStatus,
h3ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h3ApprovalDate,
h3ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h3ApprovalRemarks,
positionName = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.positionName,
positionNumber = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.positionNumber,
orgchart = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.orgChartUrl,
l2approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().level2,
l3approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().level3,
h1approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().h1,
h2approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().h2,
h3approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().h3,
ID = modelId,
l2Name = this.travelContext.Employees.Where(emp => emp.userId == l2approvaluserid).FirstOrDefault().firstName,
},
// jobdescrip = personalother.Select(x => x.gjobdescription).Distinct().ToList()
}).FirstOrDefault();*
错误已归入l2Name
属性
答案 0 :(得分:4)
对象初始化程序块无法引用正在创建的对象,因为它尚不存在。这是编译器中的一个约束,你无法解决它。
我建议你通过构造函数注入值并在内部设置它。这样可以更多地保护不变量,并使类不可变。
public class Employee
{
public Employee(string email)
{
UserName = email;
Email = email;
}
public string UserName { get; }
public string Email { get; }
}
编辑:如果始终是用户名等于电子邮件地址,我甚至可能会执行以下操作:
public class Employee
{
public Employee(string email)
{
Email = email;
}
public string UserName => Email;
public string Email { get; }
}
答案 1 :(得分:2)
你可以这样做
ModelAdmin
在您的情况下,代码就像
var str = "aaa@aa.com"
Employee obj = new Employee()
{
userName=str,
email=str
}
但如果我有类似的代码,我不会使用对象初始化程序。如果出现任何问题,它会使调试变得更加困难。