2012-12-11 72 views
0

這是我的設備類的一部分:寫Lambda表達式與ASP.NET MVC4/where子句EF CodeFIrst

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

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

在這是引晶的採樣數據,硬件被newed像這樣(部分):

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傳遞給我的觀點?

回答

0

我只有這樣做過,ICollection是字符串類型而不是自定義類型,但同樣的解決方案可能適用於您。你還沒有分享你的HardwareType定義,所以我的語法可能不是100%正確的,但它應該給你這個想法。

public ActionResult Index() { 

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

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

這應該給你,你定義它們具有關聯HardwareTypes所有硬件的對象。再次,我只用簡單的字符串做了這個,但我認爲它也會以這種方式工作。

這是一個類似的問題可能會有所幫助:How to do an "in" query in entity framework?

+0

我得到這個錯誤跟你的建議:錯誤無法隱式轉換類型'System.Linq.IQueryable 來'CIT.Models.Hardware'。存在明確的轉換(您是否缺少演員?)。建議? – sehummel

+0

明白了。 'IQueryable Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt));' – sehummel

+0

@sehummel如果你不想返回IQueryable,你可以使用'Hardware Pcs = db.Hardware。其中(h => h.HardwareType.Contains(hwt))。FirstOrDefault();或'列表 Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt))。ToList();'取決於你是否想要一個或多個結果。 –