J'essaie de sélectionner des magasins à l'aide d'une fonction lambda et de convertir le résultat en un SelectListItem afin de pouvoir le restituer. Cependant, il génère une erreur "le type d'expression dans la clause choisie est 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;
Qu'est-ce que je fais mal?
MODIFIER:
Aussi, comment convertir Int en String dans cette situation? Ce qui suit ne fonctionne pas:
select (s => new SelectListItem { Value = s.ID.ToString(), Text = s.Name} );
select (s => new SelectListItem { Value = s.ID + "", Text = s.Name} );
EDIT 2:
Calculez la conversion Int en chaîne. Il est tellement typique de Microsoft d’oublier d’inclure une fonction de conversion int2string. Voici la solution de contournement utilisée par tout le monde, avec une syntaxe parfaitement fonctionnelle:
select new SelectListItem { Value = SqlFunctions.StringConvert((double)store.ID), Text = store.Name };
Dire que cette situation est absurde est un euphémisme.
en utilisant l'expression de requête 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;
ou en utilisant des méthodes d'extension LINQ avec des expressions lambda
IEnumerable<SelectListItem> stores = database.Stores
.Where(store => store.CompanyID == curCompany.ID)
.Select(store => new SelectListItem { Value = store.Name, Text = store.ID });
ViewBag.storeSelector = stores;
Pourquoi ne pas simplement utiliser toute la syntaxe Lambda?
database.Stores.Where(s => s.CompanyID == curCompany.ID)
.Select(s => new SelectListItem
{
Value = s.Name,
Text = s.ID
});
Vous semblez essayer de mélanger la syntaxe d'expression de requête et la syntaxe d'expression "normale". Vous pouvez soit utiliser:
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;
Ou:
IEnumerable<SelectListItem> stores = database.Stores
.Where(store => store.CompanyID == curCompany.ID)
.Select(s => new SelectListItem { Value = s.Name, Text = s.ID});
ViewBag.storeSelector = stores;
Vous ne pouvez pas mélanger les deux comme vous essayez.
Résultat de l'expression lambda
var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();