LINQ к объектам ToString () - ни один из предлагаемых решений работает?

Я размещаю это больше, потому что я хотел бы узнать больше, потому что моя работа - вокруг в основном избегать использования 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;
        }
    }

Так что, если кто-то уже делает это, и они думают, что они делают это «правильным» образом, тогда я хотел бы знать, что вы думаете!

6
задан svick 4 September 2011 в 10:35
поделиться