我正在使用Linq查询来填充gridview,gv的最后一列包含合作伙伴的平均评分,这是我的问题。 当一个人从未被评级时,我期待一个空值,并且我尝试使用合并运算符将其切换为0。但是我得到了一个“System.InvalidCastException:指定的强制转换无效”。我无法弄明白为什么。
我之前从未在linq中使用过这样的子查询,所以如果我在错误的路径上,请纠正我。
我在我的数据库中使用实体框架
MembershipUser u = Membership.GetUser(User.Identity.Name);
using (DatabaseEntities db = new DatabaseEntities())
{
var q = from job in db.Jobs
join employer in db.UserProfiles on job.UserId equals employer.UserId
where job.ServiceProviderUid == (Guid)u.ProviderUserKey &&
job.Finished
select new
{
JobId = job.JobId,
Title = job.Title,
Partner = employer.FullName,
Rating = (from ur in db.User_Ratings
where ur.UserId == employer.UserId
select (int?)ur.Rating).Average() ?? 0
};
GridView1.DataSource = q.ToList();
GridView1.Columns[2].HeaderText = "Employer";
GridView1.DataBind();
}
答案 0 :(得分:3)
你想要这样吗
(int?)(from ur in db.User_Ratings
where ur.UserId == employer.UserId
select (int)ur.Rating).Average() ?? 0
如果不检查空对象,则不能使用空合并。平均值返回一个int,它不能做?反对。你试过把(int?)放在select中,如果你愿意的话,那就可以了,然后它会得到平均值,它可能会再次返回一个int而不是一个可空的。
答案 1 :(得分:0)
试试这个:
select new
{
JobId = job.JobId,
Title = job.Title,
Partner = employer.FullName,
Rating = (from ur in db.User_Ratings
where ur.UserId == employer.UserId
select (int)ur.Rating).Average() ?? 0 // Remove the ? after int
};
关于你的错误。