无法将lambda表达式转换为类型'string',因为它不是委托类型

时间:2011-07-14 16:05:31

标签: asp.net-mvc-3 entity-framework-4 lambda repository

在我的控制器中,我尝试使用包含EF4来选择相关实体,但是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());
 }

任何人都可以指出我正确的方向指出我在这里做错了吗?

5 个答案:

答案 0 :(得分:84)

嗯,帖子很老了,但只是回复这里来更新它。好吧, Entity Framework 4.1 Include()方法有扩展方法,它也接受lambda表达式。所以

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

完全有效,您需要做的就是使用它:

using System.Data.Entity;

答案 1 :(得分:11)

Include是System.Data.Entity命名空间中的扩展方法,您需要添加:

using System.Data.Entity;

然后你可以使用lambda表达式而不是字符串。

答案 2 :(得分:7)

Include方法需要一个字符串,而不是lambda:

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

当然你可以编写一个custom extension method,它可以使用lambda表达式,并使你的代码独立于某些魔术字符串,并且重构更友好。

但无论你做什么请不要将EF自动生成的对象传递给你的视图。 使用视图模型

答案 3 :(得分:1)

Include采用字符串,而不是lambda表达式 将其更改为CustomerSites.Include("Customer")

答案 4 :(得分:0)

如果您在Razor中收到此错误:

例如:

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

C#不知道如何将字符串转换为有效的bool或已知类型。

所以改变你的字符串如下:

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

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