Невозможно преобразовать лямбда-выражение в тип 'string', поскольку оно не является делегатом - PullRequest
14 голосов
/ 14 июля 2011

В моем контроллере я пытаюсь использовать 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());
 }

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

Ответы [ 5 ]

86 голосов
/ 24 февраля 2012

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

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

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

using System.Data.Entity;
11 голосов
/ 24 мая 2013

Включить - это метод расширения в пространстве имен System.Data.Entity, который необходимо добавить:

using System.Data.Entity;

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

6 голосов
/ 14 июля 2011

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

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

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

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

1 голос
/ 14 июля 2011

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

0 голосов
/ 20 января 2014

Если вы получаете эту ошибку в 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"})    
...