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

时间:2012-12-11 18:13:06

标签: lambda asp.net-mvc-4 ef-code-first

以下是我的硬件类的一部分:

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

        public virtual ICollection<HardwareType> HardwareType { get; set; }
         ....
    }

在播种的样本数据中,硬件是这样(部分地)新建的:

new Hardware { ... HardwareType = htype.Where(h => h.HType == "PC").ToArray() }

htype是一个List<HardwareType>,其中包含HType的各种字符串值,这是HardwareType类中的属性。

在我的控制器中,我试图将一个Lambda表达式赋给变量,以便我可以在视图中循环它。这就是我所拥有的:

private Context db = new Context();  

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

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

1 个答案:

答案 0 :(得分:0)

我只是在ICollection是字符串类型而不是自定义类型的情况下完成此操作,但同样的解决方案可能对您有用。你还没有分享你对HardwareType的定义,所以我的语法可能不是100%正确,但它应该给你一个想法。

public ActionResult Index() {

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

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

这应该为您提供在定义时具有关联的HardwareType的所有硬件对象。再一次,我只用简单的字符串完成了这个,但我认为它也会这样工作。

这是一个类似的问题,可能会有所帮助:How to do an "in" query in entity framework?