如何在LINQ select语句中使用Lambda

Bil*_*ill 58 c# linq asp.net-mvc 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;
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:

另外,在这种情况下如何将Int转换为String?以下不起作用:

select (s => new SelectListItem { Value = s.ID.ToString(), Text = s.Name} );
select (s => new SelectListItem { Value = s.ID + "", Text = s.Name} );
Run Code Online (Sandbox Code Playgroud)

编辑2:

找出Int到String的转换.微软很常见的是忘记包含int2string转换函数.以下是每个人都在使用的实际解决方法,具有完全可用的语法:

select new SelectListItem { Value = SqlFunctions.StringConvert((double)store.ID), Text = store.Name };
Run Code Online (Sandbox Code Playgroud)

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

Rus*_*Cam 113

使用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;
Run Code Online (Sandbox Code Playgroud)

或者使用带有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;
Run Code Online (Sandbox Code Playgroud)


Jus*_*ner 18

为什么不使用所有Lambda语法?

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


Jon*_*eet 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;
Run Code Online (Sandbox Code Playgroud)

要么:

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

你不能像你想要的那样混合两者.


小智 5

Lambda 表达式结果

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