Я размещаю это больше, потому что я хотел бы узнать больше, потому что моя работа - вокруг в основном избегать использования Linq для объектов! Было бы здорово, если бы я мог использовать это, хотя. Так что, если кто-нибудь сможет просветить меня ..
Я работаю над приложением ASP.NET MVC 3 (мой первый) с использованием кода-первой структуры сущности в качестве моей модели данных. Это будет интернет-магазин, и я работаю над контроллером «администратора», где, как администратор, вы сможете редактировать продукты и т. Д. Когда речь идет о добавлении нового продукта, вы должны указать категорию, что означает Выпадающий список категорий.
Я начал просто вернуть коллекцию Ienumerableable из категорий в ViewBag, на основе информации, которую я нашел здесь . Это казалось действительно хорошим способом приблизиться к вещам.
Но я получил ту же ошибку, вы увидите ниже. Таким образом, следуя предложению я читаю онлайн, я создал отдельную модель специально для создания новых и редактирования существующих продуктов. Коллекция категорий используется для создания раскрывающегося списка в виду.
public class ProductModel
{
public int Id { get; set; }
public int CategoryId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public double Price { get; set; }
public bool IsVisible { get; set; }
public IEnumerable Categories
{
get
{
return new DataAccess()
.Categories
.OrderBy(c => c.Description)
.Select(c => new SelectListItem
{
Value = c.Id.ToString(),
Text = c.Description
});
}
}
}
Это приводит к следующему сообщению об ошибке: « LINQ к объектам не распознает метод метода« System.String ToString () », и этот метод не может быть переведен в выражение магазина. ». Одним из предложенного онлайн-раствора было использование методов SQLFunction, предусмотренные структурой объекта. Поэтому я попробовал это вместо этого ...
public IEnumerable Categories
{
get
{
return new DataAccess()
.Categories
.OrderBy(c => c.Description)
.Select(c => new SelectListItem
{
Value = SqlFunctions.StringConvert((double)c.Id),
Text = c.Description
});
}
}
Но это приводит к этому сообщению об ошибке: « Указанный метод« System.String StringConvert) (System.nullable] Data.Objects.sqlclient.sqlfunctions 'не может быть переведен в выражение магазина Linq в сущности. ».
Я даже пробовал добавить свойство только для чтения в класс данных под названием IdasString , но это, очевидно, делает структуру объекта очень несчастной!
В конце концов, я понял, что все время не стоило того времени, которое я вложил в него, и только что остановился, используя Linq. Это работает нормально, но было бы неплохо знать, есть ли «правильный» способ сделать это, что на самом деле работает!
Это мое текущее рабочее решение:
public IEnumerable Categories
{
get
{
var dal = new DataAccess();
var categories = dal.Categories;
var items = new List();
foreach (var category in categories)
items.Add(new SelectListItem
{
Value = category.Id.ToString(),
Text = category.Description
});
return items;
}
}
Так что, если кто-то уже делает это, и они думают, что они делают это «правильным» образом, тогда я хотел бы знать, что вы думаете!