如何使用LAMBDA在LINQ select语句(How to use Lambda in LINQ

2019-07-22 18:55发布

我想选择使用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 };

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

Answer 1:

使用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;


Answer 2:

为什么不使用所有的lambda语法?

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


Answer 3:

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

像你想你不能混用两种。



Answer 4:

Lambda表达式的结果

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


Answer 5:

使用Lambda表达式:

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

      var stores = context.Stores.Select(x => new { x.id, x.name, x.city }).ToList(); 
  2. 如果我们有一个具体的类,那么我们需要的结果与之绑定:

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

使用简单的LINQ表达式:

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

     var stores = (from a in context.Stores select new { x.id, x.name, x.city }).ToList(); 
  2. 如果我们有一个具体的类,那么我们需要的结果与之绑定:

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


文章来源: How to use Lambda in LINQ select statement