LINQ to Entities не распознает метод метода System.String ToString (), и этот метод нельзя преобразовать в выражение хранилища - PullRequest
3 голосов
/ 13 июня 2011

Это мой контроллер класса

public class HomeController : Controller
{
    private rikuEntities rk = new rikuEntities();
    public ActionResult Index()
    {
        var db = new rikuEntities();
        IEnumerable<SelectListItem> items = db.emp.Select(c => new     
               SelectListItem
               {
                 Value = c.Id.ToString(), 
                 Text = c.name
               });
        ViewBag.CategoryID = items;
        return View();
    }
}

это мой взгляд

@using (Html.BeginForm("viewToController", "Home"))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>emp</legend>

        <div class="editor-field">
            @Html.DropDownList("CategoryID", (IEnumerable<SelectListItem>) ViewBag.Categories)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

всякий раз, когда я запускаю эту программу, я получаю эту ошибку:

LINQдля сущностей не распознает метод метода System.String ToString (), и этот метод не может быть преобразован в выражение хранилища.) . Я использую механизм объектной структуры для соединения с базой данных. Пожалуйста, помогите мне выяснить ошибку ...

Ответы [ 2 ]

4 голосов
/ 13 июня 2011

Я бы порекомендовал вам использовать модели представления и строго типизированные представления вместо ViewBag.Итак, начните с определения вашей модели представления:

public class EmployeeViewModel
{
    public string CategoryId { get; set; }
    public IEnumerable<Employee> Categories { get; set; }
}

, затем в контроллере заполните эту модель представления:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var db = new rikuEntities();
        var model = new EmployeeViewModel
        {
            Categories = db.emp.ToArray() // <-- you probably want categories here
        };
        return View(model);
    }
}

и в представлении:

@model EmployeeViewModel
@using (Html.BeginForm("viewToController", "Home"))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>emp</legend>

        <div class="editor-field">
            @Html.DropDownListFor(
                x => x.CategoryId,
                new SelectList(Model.Categories, "Id", "name")
            )
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
3 голосов
/ 25 сентября 2013

К сожалению, EF не знает, как преобразовать ToString() в оператор SQL.

Поэтому вы должны использовать встроенную функцию SqlFunctions.StringConvert .

Для int перегрузки нет, поэтому вам нужно будет выполнить приведение к double: - (

var items = from v in db.emp  
   select new SelectListItem
   {     
       Text = c.name,        
       Code = SqlFunctions.StringConvert((double)c.Id)
   }; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...