在ASP.NET MVC4/EF CodeFIrst中使用where子句编写Lambda表达式

在ASP.NET MVC4/EF CodeFIrst中使用where子句编写Lambda表达式,lambda,asp.net-mvc-4,ef-code-first,Lambda,Asp.net Mvc 4,Ef Code First,这是我的硬件课程的一部分: public class Hardware { public int Id { get; set; } public virtual ICollection<HardwareType> HardwareType { get; set; } .... } htype是一个列表,其中包含htype的各种字符串值,这是硬件类型类中的属性 在我的控制器中,我尝试将Lambda表达式分配给变量,以

这是我的硬件课程的一部分:

public class Hardware
    {
        public int Id { get; set; }

        public virtual ICollection<HardwareType> HardwareType { get; set; }
         ....
    }
htype
是一个
列表
,其中包含
htype
的各种字符串值,这是
硬件类型
类中的属性

在我的控制器中,我尝试将Lambda表达式分配给变量,以便在视图中循环使用它。以下是我所拥有的:

private Context db = new Context();  

public ActionResult Index() {
    Hardware Pcs = db.Hardware.Where(h => h.HardwareType == "PC");
}

但是编译器告诉我我不能这样做,因为
h.HardwareType
是一个iCollection。这是有道理的。但是,我如何编写这行代码,以便将
Pcs
传递到我的视图?

我只在ICollection是string类型而不是自定义类型的情况下这样做过,但相同的解决方案可能适用于您。你还没有分享你对硬件类型的定义,所以我的语法可能不是100%正确,但它应该能让你明白

public ActionResult Index() {

    HardwareType hwt = new HardwareType { HType = "PC" };

    Hardware Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt));
}
这将为您提供定义时具有关联硬件类型的所有硬件对象。再说一次,我只使用简单的字符串,但我认为它也可以这样工作


这是一个类似的问题,可能会有所帮助:

我根据您的建议得到这个错误:错误18无法将类型“System.Linq.IQueryable”隐式转换为“CIT.Models.Hardware”。存在显式转换(是否缺少转换?)。建议?明白了<代码>IQueryable Pcs=db.Hardware.Where(h=>h.HardwareType.Contains(hwt))@sehummel如果不想返回IQueryable,可以执行
Hardware Pcs=db.Hardware.Where(h=>h.HardwareType.Contains(hwt)).FirstOrDefault()或'List Pcs=db.Hardware.Where(h=>h.HardwareType.Contains(hwt)).ToList();`取决于您想要一个或多个结果。
public ActionResult Index() {

    HardwareType hwt = new HardwareType { HType = "PC" };

    Hardware Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt));
}