1

我在使用 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'

4

1 回答 1

0

好的,是时候完全重置了。根据聊天记录,我希望您尝试以下操作:

1) 保留您原来的 LINQ 查询,但不要将其设为匿名类型。创建另一个对象类型,其中包含 Hardware 和 HardwareType 属性。这将使 Pcs(以及 ViewBag.Pcs)成为该特定类型的列表。

2) 将以下 foreach 循环放入您的视图代码中:

foreach (var item in ViewBag.Pcs as List<YourTypeName>)
{
   var htype = item.HardwareType.HType;
}

如果您不想每次通过循环都进行一些延迟加载,您可以在控制器中执行以下操作以立即加载实体:

var hardwareTypes = pcs.Select(p => p.HardwareType).ToList();

让我知道这是否有效。

于 2012-12-27T22:42:04.963 回答