C# 在Linq查询对象初始值设定项中将小数值除以大数值得到0
我有以下get方法: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
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
,然后(在下一个中选择
)将它们转换为十进制
,并划分代码中如何实现这一点,抱歉,这是一个相对较新的问题