如何在ASP.NET MVC4中为两个类编写LINQ连接

时间:2012-12-27 22:21:03

标签: c# linq ef-code-first

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

1 个答案:

答案 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();

如果有效,请告诉我。