system.collections.generic.list到system.collections.generic.ienumerable

时间:2017-04-30 13:43:40

标签: c# asp.net asp.net-mvc linq

我有一个方法,其中列表无法转换为ienumerable。我如何施展???

 public ActionResult Attending()
 {
    var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
    var gigs = _context.Attendances.Include(a => a.Gig.Artist).Include(a => a.Gig.Genre).Where(a => a.AttendeeId == userId).ToList();
    var viewModel = new GigsViewModel()
    {
       UpcomingGigs = gigs,
       ShowActions = User.Identity.IsAuthenticated,
       Heading = "Gigs I'm Attending"
       };
       return View("Gigs", viewModel);
    }

这是我的ViewModel:

public class GigsViewModel
{
   public IEnumerable<Gig> UpcomingGigs { get; set; }
   public bool ShowActions { get; set; }
   public string Heading { get; set; }
}

3 个答案:

答案 0 :(得分:0)

您还可以先获取所有与会者,然后选择演出。

IEnumerable<Gig> gigs = _context.Attendances.Where(a => a.AttendeeId == userId).Select(a => a.Gig).ToList();

请注意是否可以有多个类似的演出,那么您可能只需要使用Distinct进行不同的演出:

IEnumerable<Gig> gigs = _context.Attendances.Where(a => a.AttendeeId == userId).Select(a => a.Gig).Distinct().ToList();

详情请见:https://msdn.microsoft.com/en-us/library/bb534803(v=vs.110).aspx

编辑:编辑旧建议,区别并选择添加。

答案 1 :(得分:0)

尝试使用以下代码,AsEnumerable()将完成您的工作

var gigs = _context.Attendances.Where(a => a.AttendeeId == userId).select(a=> 
new Gig()
 {
   property = a.property //assuming property, you can repeat the same for other properties of Gig
 }).AsEnumerable();

Linq数据库查询的结果通常是IQueryable,它是从IEnumerable,IQueryable和IEnumerable派生的。

在您的情况下,它是linq数据库查询,因此您需要调用AsEnumerable();

答案 2 :(得分:0)

UpcomingGigs = gigs.Cast<Gig>().ToList()