我正在尝试使用lambda函数选择商店并将结果转换为SelectListItem,以便我可以渲染它。然而,它在“选择条款不正确”中抛出“表达式”错误:
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转换为String?以下不起作用:
select (s => new SelectListItem { Value = s.ID.ToString(), Text = s.Name} );
select (s => new SelectListItem { Value = s.ID + "", Text = s.Name} );
编辑2:
找出Int to String转换。微软很常见的是忘记包含int2string转换函数。以下是每个人都在使用的实际解决方法,语法完全正确:
select new SelectListItem { Value = SqlFunctions.StringConvert((double)store.ID), Text = store.Name };
称这种情况荒谬是轻描淡写的。
答案 0 :(得分:109)
使用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;
答案 1 :(得分:17)
为什么不直接使用所有Lambda语法?
database.Stores.Where(s => s.CompanyID == curCompany.ID)
.Select(s => new SelectListItem
{
Value = s.Name,
Text = s.ID
});
答案 2 :(得分:16)
您似乎正在尝试混合使用查询表达式语法和“普通”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;
你不能像你想要的那样混合两者。
答案 3 :(得分:3)
Lambda表达式结果
var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();
答案 4 :(得分:-1)
使用Lambda表达式:
如果我们没有特定的类来绑定结果:
var stores = context.Stores.Select(x => new { x.id, x.name, x.city }).ToList();
如果我们有一个特定的类,那么我们需要将结果与之绑定:
List<SelectListItem> stores = context.Stores.Select(x => new SelectListItem { Id = x.id, Name = x.name, City = x.city }).ToList();
使用简单的LINQ表达式:
如果我们没有特定的类来绑定结果:
var stores = (from a in context.Stores select new { x.id, x.name, x.city }).ToList();
如果我们有一个特定的类,那么我们需要将结果与之绑定:
List<SelectListItem> stores = (from a in context.Stores select new SelectListItem{ Id = x.id, Name = x.name, City = x.city }).ToList();