MVC 5无法将类型'System.Linq.IQueryable隐式转换为bool?

时间:2014-07-16 18:20:07

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

对于我的生活,如果我双击HomeController带来的错误并突出显示行Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'bool?'中的select语句,我无法弄清楚我是如何得到错误statsModel.Donations = (from q in db.Shows where (q.Id == 1) select new { q.Donations });的。 / p>

Show.cs

namespace WebApplication1.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Show
    {
        public int Id { get; set; }
        public Nullable<bool> Donations { get; set; }
    }
}

StatsisticsModel.cs

namespace WebApplication1.Models
{
    using System;

    public class StatisticsModels
    {
        public int UserCount { get; set; }
        public decimal? TotalAmount { get; set; }
        public Nullable<bool> Donations { get; set; }
    }
}

的HomeController

[ChildActionOnly]
public ActionResult Statistics()
{
    var statsModel = new StatisticsModels();
    statsModel.UserCount = (from m in db.AspNetUsers where (m.UserName != "someone") && (m.EmailConfirmed == true) select new { m.UserName }).Count();
    statsModel.TotalAmount = db.Donations.Sum(o => o.Amount);
    statsModel.Donations = (from q in db.Shows where (q.Id == 1) select new { q.Donations });
    return View(statsModel);
}

任何人都可以请求帮助,我想要返回的是Show表中的Donations和People字段对于特定记录是真还是假。

我非常感谢任何帮助: - )

2 个答案:

答案 0 :(得分:2)

假设Donations是模型中的布尔字段,并且您只希望获得一条针对身份证的记录,我认为您只是想要:

statsModel.Donations = (from q in db.Shows where (q.Id == 1) select q.Donations).Single();

statsModel.Donations = db.Shows.Where(q => q.Id == 1).Single(q => q.Donations);

答案 1 :(得分:1)

问题在于这一行:

 statsModel.Donations = (from q in db.Shows where (q.Id == 1) select new { q.Donations });

这将尝试将匿名类型对象的集合分配给Donations,它可以包含单个值(Nullable)。

  

我想要回归的是内部的捐款和人员领域   Show表对于特定记录是真还是假。

您需要以下内容:

statsModel.Donations = db.Shows.Any(q=> q.Id == 1);

如果数据库中的字段Donations的类型为boolean,那么您需要使用First/FirstOrDefaultSingle/SingleOrDefault根据您的要求从查询中获取该字段的单个实例。

statsModel.Donations = (from q in db.Shows where (q.Id == 1) select q.Donations)
                       .FirstOrDefault();