Невозможно преобразовать лямбда-выражение для ввода "string", потому что это не тип делегата

В моем контроллере я пытаюсь использовать include с EF4 для выбора связанных объектов, но выражение лямбда бросает следующую ошибку,

У меня есть связанный объект, определенный в классе Entity, например

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());
 }

Может ли кто-нибудь любезно указать мне в правильном направлении на то, что я делаю неправильно здесь?

Ответ 1

Метод Include ожидает строку, а не лямбда:

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

Конечно, вы могли бы написать метод пользовательских расширений, который будет работать с лямбда-выражениями и сделать ваш код независимым от каких-то магических строк и рефакторинга более дружелюбным.

Но что бы вы ни делали ПОЖАЛУЙСТА, ОН ПОЖАЛУЙСТА, не пропускайте автогенерированные объекты EF к вашим представлениям. ИСПОЛЬЗОВАТЬ МОДЕЛИ ПРОСМОТРА.

Ответ 2

Хорошо, сообщение довольно старое, но просто отвечает здесь, чтобы обновить его. Ну, метод Include() с Entity Framework 4.1 имеет методы расширения и также принимает выражение лямбда. Так

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

отлично, все, что вам нужно сделать, это использовать:

using System.Data.Entity;

Ответ 3

Include - это метод расширения в пространстве имен System.Data.Entity, вам нужно добавить:

using System.Data.Entity;

Затем вы можете использовать выражение лямбда вместо строки.

Ответ 4

Include принимает строку, а не лямбда-выражение.
Измените его на CustomerSites.Include("Customer")

Ответ 5

Если вы получаете эту ошибку в Razor:

Пример:

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

С# не знает, как преобразовать строку в допустимый тип bool или известный тип.

Поэтому измените вашу строку, как показано ниже:

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

или же

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