我在LINQPad(https://www.linqpad.net/)中创建了以下查询,并且一切正常。
var UserEvents = from e in _context.Events
join s in _context.Shifts on e.ShiftID equals s.SHFID
where e.UID == userID
select new UserEvents
{
EVTID = e.EVTID,
UID = e.UID,
ShiftID = e.ShiftID,
EVTDate = e.EVTDate,
Notes = e.Notes,
AreaID = s.Area.AreaID,
AreaDesc = s.Area.AreaDesc,
CPYDesc = s.Area.Company.CPYDesc,
StartTime = s.StartTime,
EndTime = s.EndTime,
RequiredResources = s.RequiredResources,
ShiftDesc = s.ShiftDesc,
ShiftDayOfWeek = s.ShiftDayOfWeek
};
当我把它移到 VS时,它抱怨Shift没有Area的定义。
这是真的Shift.cs不包含对Area的显式声明,因为在public List<Shift> SHFID { get; set; }
现在我很想弄清楚如何在不填充表格结构的情况下使这个查询工作(首先使用代码Entity.Framework)
public class Shift
{
[Key]
public int SHFID { get; set; }
public TimeSpan StartTime { get; set; }
public TimeSpan EndTime { get; set; }
public int RequiredResources { get; set; }
public string ShiftDesc { get; set; }
public string ShiftDayOfWeek { get; set; }
public DateTime ShiftExDateStart { get; set; }
public DateTime ShiftExDateEnd { get; set; }
public int ShiftExLevel { get; set; }
public TimeSpan ShiftExStartTime { get; set; }
public TimeSpan ShiftExEndTime { get; set; }
}
public class Area
{
[Key]
public int AreaID { get; set; }
public string AreaDesc { get; set; }
public Boolean AreaActive { get; set; }
public DateTime AreaCreatedDate { get; set; }
public List<Shift> SHFID { get; set; }
}
答案 0 :(得分:0)
您基本上要做的是获取shift对象的Area属性
AreaID = s.Area.AreaID,
这是错误的,因为您的数据模型表示区域可以包含1-> n关系的移位。你需要在e.AreaId上的区域添加另一个连接,并使用该对象获取区域的属性
var UserEvents = from e in _context.Events
join s in _context.Shifts on e.ShiftID equals s.SHFID
join a in _context.Areas on e.AreaID equals a.AreaID
where e.UID == userID
select new UserEvents
{
EVTID = e.EVTID,
UID = e.UID,
ShiftID = e.ShiftID,
EVTDate = e.EVTDate,
Notes = e.Notes,
AreaID = a.AreaID,
AreaDesc = a.AreaDesc,
CPYDesc = a.Company.CPYDesc,
StartTime = s.StartTime,
EndTime = s.EndTime,
RequiredResources = s.RequiredResources,
ShiftDesc = s.ShiftDesc,
ShiftDayOfWeek = s.ShiftDayOfWeek
};
答案 1 :(得分:0)
好吧,在Shift中添加一个属性Area。 EF应该将它作为两个类之间的1:n(Area:Shift)关系进行选择,并将其转换为SQL连接。 - 格特阿诺德
这解决了我的问题,
将public Area Area { get; set; }
添加到我的班级,可以进行我正在寻找的导航。