Как использовать 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 };
Называть эту ситуацию абсурдным является преуменьшение.
Ответы
Ответ 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
});