Подтвердить что ты не робот

Как использовать Lambda в выражении LINQ select

Я пытаюсь выбрать магазины с помощью лямбда-функции и преобразовать результат в SelectListItem, чтобы я мог его отобразить. Однако он бросает " Тип выражения в Select Clause is Incorrect":

IEnumerable<SelectListItem> stores =
    from store in database.Stores
    where store.CompanyID == curCompany.ID
    select (s => new SelectListItem { Value = s.ID, Text = s.Name} );
ViewBag.storeSelector = stores;

Что я делаю неправильно?

EDIT:

Также, как мне преобразовать Int в String в этой ситуации? Не работает следующее:

select (s => new SelectListItem { Value = s.ID.ToString(), Text = s.Name} );
select (s => new SelectListItem { Value = s.ID + "", Text = s.Name} );

ИЗМЕНИТЬ 2:

Вывести преобразование Int в String. Это типично для Microsoft, чтобы забыть включить функцию преобразования int2string. Вот фактический обходной путь, который все используют, с полностью работающим синтаксисом:

select new SelectListItem { Value = SqlFunctions.StringConvert((double)store.ID), Text = store.Name };

Называть эту ситуацию абсурдным является преуменьшение.

4b9b3361

Ответ 1

с использованием выражения запроса LINQ

 IEnumerable<SelectListItem> stores =
        from store in database.Stores
        where store.CompanyID == curCompany.ID
        select new SelectListItem { Value = store.Name, Text = store.ID };

 ViewBag.storeSelector = stores;

или используя методы расширения LINQ с лямбда-выражениями

 IEnumerable<SelectListItem> stores = database.Stores
        .Where(store => store.CompanyID == curCompany.ID)
        .Select(store => new SelectListItem { Value = store.Name, Text = store.ID });

 ViewBag.storeSelector = stores;

Ответ 2

Кажется, вы пытаетесь смешивать синтаксис выражения запроса и "нормальный" синтаксис выражения лямбда. Вы можете использовать:

IEnumerable<SelectListItem> stores =
        from store in database.Stores
        where store.CompanyID == curCompany.ID
        select new SelectListItem { Value = store.Name, Text = store.ID};
ViewBag.storeSelector = stores;

Или:

IEnumerable<SelectListItem> stores = database.Stores
        .Where(store => store.CompanyID == curCompany.ID)
        .Select(s => new SelectListItem { Value = s.Name, Text = s.ID});
ViewBag.storeSelector = stores;

Вы не можете смешивать эти два, как вы пытаетесь.

Ответ 3

Почему бы просто не использовать весь синтаксис лямбда?

database.Stores.Where(s => s.CompanyID == curCompany.ID)
               .Select(s => new SelectListItem
                   {
                       Value = s.Name,
                       Text = s.ID
                   });