Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq查询对象初始值设定项中将小数值除以大数值得到0_C#_Asp.net Mvc_Linq - Fatal编程技术网

C# 在Linq查询对象初始值设定项中将小数值除以大数值得到0

C# 在Linq查询对象初始值设定项中将小数值除以大数值得到0,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有以下get方法: public ActionResult InstructorEventsAttended() { //Populate the list var instructors = from s in db.Instructors orderby db.InstructorEvents.Where(x => x.InstructorId == s.InstructorId && x.Attendanc

我有以下get方法:

public ActionResult InstructorEventsAttended()
{
    //Populate the list
    var instructors = from s in db.Instructors
                      orderby db.InstructorEvents.Where(x => x.InstructorId == s.InstructorId && x.AttendanceId == 4).Count() descending
                      select s;
    var viewModel = instructors.Select(t => new StatsInstructorEventsAttendedViewModel
    {
        Name = t.FirstName + " " + t.LastName,
        EventsAttendedF = db.InstructorEvents.Where(x => x.InstructorId == t.InstructorId && x.AttendanceId == 4 && x.Event.EventTypeId == 1).Count(),
        EventsAttendedFPer = (db.InstructorEvents.Where(x => x.InstructorId == t.InstructorId && x.AttendanceId == 4 && x.Event.EventTypeId == 1).Count() / db.Events.Where(x => x.EventDate >= t.Joined && x.EventTypeId == 1 && x.EventStatusId == 2).Count()) * 100,               
    });
    return PartialView("_InstructorEventsAttended", viewModel);
}
视图模型为:

public class StatsInstructorEventsAttendedViewModel
{
    public int InstructorId { get; set; }

    [Display(Name = "Name")]
    public string Name { get; set; }

    [Display(Name = "Fundraising")]
    public decimal EventsAttendedF { get; set; }

    [Display(Name = "Fundraising")]
    public decimal EventsAttendedFPer { get; set; }
}
但是,EventsAttendedPer的初始化器计算为零,因为第一个计数小于第二个计数。我知道解决此问题的方法是将数字转换为十进制,但当我尝试转换时,会出现错误。ToDecimal:

System.NotSupportedException:LINQ to Entities无法识别方法“System.Decimal ToDecimal(Int32)”方法,并且无法将此方法转换为存储表达式


如何将计数转换为十进制以获得正确的除法结果?

所有代码都归结为“我希望3/2返回1.5”,对吗?转换为浮点数据类型,例如
double

(double)myCount1 / (double)myCount2 * 100.0

实体框架仍然无法识别
Convert.*
方法。无论如何都要避免它们。它们是一种代码气味。通常,普通转换是正确的答案,因为它很简单。

您不能在LinqToSQL查询中进行解析,因为它需要转换为SQL,而且据我所知,没有用于解析的SQL函数。异常消息明确指出:
LINQ to Entities无法识别“System.Decimal ToDecimal(Int32)”方法,此方法无法转换为存储表达式。
是否有解决方法?check Jon Skeet回答的可能重复简单的解决方法是选择计数,然后调用
.AsEnumerable
,然后(在下一个
中选择
)将它们转换为
十进制
,并划分代码中如何实现这一点,抱歉,这是一个相对较新的问题