【问题标题】:MVC 5 Cannot implicitly convert type 'System.Linq.IQueryable to bool?MVC 5 无法将类型'System.Linq.IQueryable 隐式转换为布尔值?
【发布时间】:2014-09-07 09:41:52
【问题描述】:

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

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 字段对于特定记录是 true 还是 false。

任何帮助我都会非常感激:-)

【问题讨论】:

  • 似乎很清楚 - Donations 被定义为 Nullable&lt;bool&gt; 但您正在为其分配查询。查询是否应该返回单个真/假值?

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


【解决方案1】:

假设 Donations 是您模型中的一个布尔字段,并且您只期望一个 tat 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);

【讨论】:

  • 非常感谢,这正是我想要的 :-)
【解决方案2】:

问题出在这一行:

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

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

我想要返回的只是 Donations 和 People 字段是否包含在 Show 表对于特定记录是真还是假。

你需要这样的东西:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多