MVC 5不能隐式转换类型'System.Linq.可查询到bool

本文关键字:Linq System 查询 bool 不能 类型 转换 MVC | 更新日期: 2023-09-27 18:13:18

对于我的生活,我不知道我是如何得到错误Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'bool?',如果我双击错误,它带我到home控制器,并突出显示statsModel.Donations = (from q in db.Shows where (q.Id == 1) select new { q.Donations });内的选择语句。

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);
}

任何人都可以帮助,所有我想返回的是显示表内的捐赠和人员字段是否为特定记录的真或假。

任何帮助我将不胜感激:-)

MVC 5不能隐式转换类型'System.Linq.可查询到bool

假设Donations是模型中的布尔字段,并且您只期望该ID的一个记录,我认为您只是想要:

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);

这一行的问题是:

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

这将尝试将一个匿名类型对象的集合分配给Donations,它可以保存单个值(空值)。

所有我想返回的是是否捐赠和人字段内对于特定的记录,Show表的值为真或假。

你需要这样写:

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

如果你的字段Donations在数据库中是布尔类型,那么你需要从你的查询中获得一个实例,根据你的需求使用First/FirstOrDefault, Single/SingleOrDefault

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