我想选择使用lambda函数,并将结果转换为SelectListItem这样我就可以使IT卖场。 但是它被扔“ 在SELECT子句中表达的类型是不正确的 ”错误:
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;
我究竟做错了什么?
编辑:
此外,我怎么int转换成字符串在这种情况呢? 以下不工作:
select (s => new SelectListItem { Value = s.ID.ToString(), Text = s.Name} );
select (s => new SelectListItem { Value = s.ID + "", Text = s.Name} );
编辑2:
找出诠释到字符串转换。 它是如此典型的微软的忘了包括int2string转换功能。 这是大家都在用,用完全正常的语法实际的解决方法:
select new SelectListItem { Value = SqlFunctions.StringConvert((double)store.ID), Text = store.Name };
为了把这种情况荒谬的是一种轻描淡写。
使用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;
或使用带有lambda表达式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;
为什么不使用所有的lambda语法?
database.Stores.Where(s => s.CompanyID == curCompany.ID)
.Select(s => new SelectListItem
{
Value = s.Name,
Text = s.ID
});
你似乎是试图混合查询表达式语法和“正常” lambda表达式语法。 您可以使用:
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;
像你想你不能混用两种。
Lambda表达式的结果
var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();