2011-07-14 55 views
11

在我的控制器中我將嘗試使用帶有EF4來選擇相關的實體包括但lambda表達式拋出下面的錯誤,無法轉換lambda表達式到類型「串」,因爲它不是一個委託類型

我在實體類定義如下

public class CustomerSite 
{ 
    public int CustomerSiteId { get; set; } 
    public int CustomerId { get; set; } 
    public virtual Customer Customer { get; set; } 
} 

相關實體然後在我的控制,我有

var sites = context.CustomerSites.Include(c => c.Customer); 

public ViewResult List() 
{ 
    var sites = context.CustomerSites.Include(c => c.Customer); 
    return View(sites.ToList()); 
} 

誰能好心點我在正確的方向是什麼我在這裏做錯了?

回答

9

Include方法需要一個字符串,而不是一個拉姆達:

public ViewResult List() 
{ 
    var sites = context.CustomerSites.Include("Customer"); 
    return View(sites.ToList()); 
} 

當然,你可以寫一個custom extension method這將與lambda表達式工作,使一些神奇的字符串代碼獨立的和重構友好。

但無論你做什麼請求OH請不要將EF自動生成的對象傳遞給您的意見。 使用視圖模型

+1

感謝,但談何容易,我無法找到如何使用視圖模型返回相關數據 – Liam

+0

了堅實的例子@Darin Dimitrov你能不能來看看我發佈的類似問題。 http://stackoverflow.com/q/16060884/1356321 – Pomster

+0

您可以請參考下面的更新:http:// stackoverflow。com/a/9428710/1268910 –

1

Include需要一個字符串,而不是一個lambda表達式。
更改爲CustomerSites.Include("Customer")

67

那麼,該帖子是相當老,但只是在這裏回覆來更新它。那麼,Include()方法實體框架4.1有擴展方法,它也接受lambda表達式。所以

context.CustomerSites.Include(c => c.Customer); 

是完全有效的,所有你需要做的是使用:

using System.Data.Entity; 
8

包括在System.Data.Entity的命名空間的擴展方法,你需要添加:

using System.Data.Entity; 

然後,您可以使用lambda表達式而不是字符串。

0

如果您收到此錯誤在剃刀:

例:

@Html.RadioButtonFor(model => model.Security, "Fixed", new { @id = "securityFixed"})        

C#不知道如何將字符串轉換爲有效的布爾或已知類型。

因此改變你的字符串如下:

@Html.RadioButtonFor(model => model.Security, "True", new { @id = "securityFixed"}) 

@Html.RadioButtonFor(model => model.Security, "False", new { @id = "securityFixed"})  
相關問題