2013-04-15 53 views
1

可以請人幫我這點.NET MVC問題:如何包括子類

我有這些類:

public class ImportItem 
{ 
    [Key] 
    public int Id { get; set; } 
} 

public class ImportItemListTemplate 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<ImportItem> ImportItemList { get; set; } 
} 

public class Context : DbContext 
{ 
    public DbSet<ImportItemListTemplate> ImportItemListTemplates { get; set; } 
} 

在控制器我需要設置:

Context context = new Context(); 
int id = ...; 
ImportItemListTemplate tmp = context.ImportItemListTemplates.Find(id); 

但是這並不包含ImportItemListTemplate類中的ImportItemList。我想我需要包括屬性ImportItemList,但我不知道如何。

我試着像somethink:

ImportItemListTemplate tmp = context.ImportItemListTemplates.Include(i => i.ImportItemList).SingleOrDefault(x => x.Id == id); 

但它不工作。錯誤:

"Cannot convert lambda expression to type 'string' because its not delegate type"

謝謝各位大大給你幫助。

+0

歡迎來到Stackoverflow。請閱讀[常見問題]和[問]和[我如何寫一個好標題?](http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title) –

+1

您錯過了使用說明。 – gdoron

回答

0

你的代碼看起來應該像下面,

ImportItemListTemplate tmp = context.ImportItemListTemplates.Include("ImportItemList").SingleOrDefault(x => x.Id == id); 
+0

非常感謝!就是這樣.-) – Petr

+0

還有一個問題:假設我在類ImportItem中有另一個屬性(我的類--DbTbl)。我也想包括它。我試過這樣的想法: ImportItemListTemplate tmp = context.ImportItemListTemplates.Include(「ImportItemList」).include(「DbTbl」).SingleOrDefault(x => x.Id == id); 但id不起作用。我相信,如果該屬性將處於同一級別(ImportItemListTemplates類的屬性),則不會發生這種情況。 我也非常感謝這個回覆。 – Petr

+0

親愛的彼得,你必須在ImportItemListTemplate類中添加一個導航屬性。它看起來像'公共虛擬列表 DbTbls {get;組; }' 欲瞭解更多的信息,你可以嘗試這[鏈接](http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-a-more-complex-data -model-for-an-asp-net-mvc-application) –

0

試試這個:

ImportItemListTemplate tmp = context.ImportItemListTemplates 
            .Include(i => i.ImportItemList) 
            .Where(x => x.Id) 
            .SingleOrDefault(); 
+0

謝謝你的快速回答。 Uzmanim.Net答案是我正在尋找 - 只是字符串屬性名稱。在你的溶劑中有同樣的錯誤,就像我的(如果我理解的很好)。 – Petr

0

DbSet.Include接受一個字符串,所以它不會很樂意與一個lambda。

我想你需要的是在System.Data.Entity命名空間中的IQueryable<T>.Include擴展方法,特別是接受表達式的overload。有了它,您可以使用如下語法:

query.Include(e => e.Level1Collection) 

從數據庫加載集合屬性。
如果未將名稱空間添加到using列表中並再次嘗試該代碼,請添加該名稱空間。

+0

感謝您的快速回復。這就對了 - 我不能使用lambda。 Uzmanim.Net溶出很清楚,正是我所期待的。 – Petr

+0

我現在添加了這個命名空間,現在確定了.-)謝謝。 – Petr