如何在LINQ select语句中使用Lambda

我试图select商店使用lambda函数,并将结果转换为SelectListItem,所以我可以呈现它。 但是它抛出了“ select条款中的expression式types不正确 ”错误:

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到String的转换。 忘记包含int2string转换函数是微软的典型做法。 以下是每个人正在使用的实际解决方法,具有完整的工作语法:

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

把这种情况称为荒谬的是轻描淡写。

使用LINQ查询expression式

  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扩展方法和lambdaexpression式

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

您似乎试图混合查询expression式语法和“正常”lambdaexpression式语法。 你可以使用:

 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语法?

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