How to use Lambda in LINQ select statement

前端 未结 5 1986
孤独总比滥情好
孤独总比滥情好 2020-12-04 08:01

I am trying to select stores using a lambda function and converting the result to a SelectListItem so I can render it. However it is throwing a \"Type of Expression

相关标签:
5条回答
  • 2020-12-04 08:16

    using LINQ query 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;
    

    or using LINQ extension methods with lambda expressions

     IEnumerable<SelectListItem> stores = database.Stores
            .Where(store => store.CompanyID == curCompany.ID)
            .Select(store => new SelectListItem { Value = store.Name, Text = store.ID });
    
     ViewBag.storeSelector = stores;
    
    0 讨论(0)
  • 2020-12-04 08:23

    Using Lambda expressions:

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

       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();
      
    0 讨论(0)
  • 2020-12-04 08:24

    You appear to be trying to mix query expression syntax and "normal" lambda expression syntax. You can either use:

    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;
    

    Or:

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

    You can't mix the two like you're trying to.

    0 讨论(0)
  • 2020-12-04 08:32

    Lambda Expression result

    var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();
    
    0 讨论(0)
  • 2020-12-04 08:41

    Why not just use all Lambda syntax?

    database.Stores.Where(s => s.CompanyID == curCompany.ID)
                   .Select(s => new SelectListItem
                       {
                           Value = s.Name,
                           Text = s.ID
                       });
    
    0 讨论(0)
提交回复
热议问题