我无法使用EF Code First从联接表访问属性。这是我家控制器中的查询:
var pcs = from h in db.Hardwares
join hwt in db.HardwareTypes
on h.HardwareTypeId equals hwt.Id
where h.HardwareType.HType == "PC"
select new { Hardware = h, HardwareType = hwt };
ViewBag.Pcs = pcs.ToList();
这是我的HardwareTypes类:
public class HardwareType
{
public int Id { get; set; }
//[Required]
//[StringLength(128)]
public string HType { get; set; }
}
这是我的硬件类:
public class Hardware
{
public int Id { get; set; }
public int HardwareTypeId { get; set;}
public virtual HardwareType HardwareType { get; set; }
}
如何更改我的LINQ查询,HType
位于ViewBag
?数据库似乎正在生成,只是我似乎无法访问HType
。我收到错误'object' does not contain a definition for 'HType'
答案 0 :(得分:0)
好的,完全重置的时间。根据聊天情况,我希望您尝试以下方法:
1)保留原始的LINQ查询,但不要将其设为匿名类型。创建另一个将具有Hardware和HardwareType属性的对象类型。这将使Pcs(以及ViewBag.Pcs)成为该特定类型的列表。
2)将以下foreach循环放在View代码中:
foreach (var item in ViewBag.Pcs as List<YourTypeName>)
{
var htype = item.HardwareType.HType;
}
如果你不希望每次循环都做一些延迟加载,你可以在控制器中执行以下操作,立即加载实体:
var hardwareTypes = pcs.Select(p => p.HardwareType).ToList();
如果有效,请告诉我。