如何在 LINQselect 语句中使用 Lambda

我正在尝试使用 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 到 String 的转换。微软经常忘记包含 int2string 转换函数。下面是每个人实际使用的解决方案,包括完整的语法:

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

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

503619 次浏览

您似乎试图混合查询表达式语法和“正常”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 语法呢?

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

使用 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 表达式:

  1. 如果我们没有一个特定的类来绑定结果:

     var stores = context.Stores.Select(x => new { x.id, x.name, x.city }).ToList();
    
  2. If we have a specific class then we need to bind the result with it:

    List<SelectListItem> stores = context.Stores.Select(x => new SelectListItem { Id = x.id, Name = x.name, City = x.city }).ToList();
    

Using simple LINQ expressions:

  1. If we don't have a specific class to bind the result:

    var stores = (from a in context.Stores select new { x.id, x.name, x.city }).ToList();
    
  2. If we have a specific class then we need to bind the result with it:

    List<SelectListItem> stores = (from a in context.Stores select new SelectListItem{ Id = x.id, Name = x.name, City = x.city }).ToList();
    

Lambda 表达式结果

var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();