Невозможно преобразовать лямбда-выражение для ввода "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"})