70

我正在尝试使用 lambda 函数选择商店并将结果转换为 SelectListItem 以便我可以呈现它。但是它会抛出“ Select Clause 中的表达式类型不正确”错误:

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 转换函数是 Microsoft 的典型做法。这是每个人都在使用的实际解决方法,具有完全有效的语法:

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

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

4

5 回答 5

129

使用 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;
于 2013-03-22T18:58:23.197 回答
20

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

database.Stores.Where(s => s.CompanyID == curCompany.ID)
               .Select(s => new SelectListItem
                   {
                       Value = s.Name,
                       Text = s.ID
                   });
于 2013-03-22T18:58:22.610 回答
17

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

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

于 2013-03-22T18:58:08.950 回答
5

Lambda 表达式结果

var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();
于 2018-09-21T06:32:59.797 回答
0

使用 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();
    
于 2018-09-20T13:33:16.513 回答