【问题标题】:How to get Average rating in entity framework如何在实体框架中获得平均评级
【发布时间】:2018-06-01 01:38:51
【问题描述】:

嗨,我有以下代码

var query = (from R in db.Registrations
            join c in db.Campus
            on R.CampusId equals c.CampusId
            from tsr in db.TutorStudentRequests.Where(t => t.TutorId == R.RegistrationId).DefaultIfEmpty()
            where R.UserTypeId == 2 && tsr.StatusId!=3
            orderby R.Name ascending
            select new
            {
                RegistrationId = R.RegistrationId,
                Name = R.Name,
                Email = R.Email,
                Phone = R.Phone,
                Password = c.CampusName,
                IsGPA = R.IsGPA,
                IsActive = R.IsActive,
                StripeId = R.StripeId,
                CreatedOn = R.CreatedOn,
                UserTypeId =tsr.StudentReviewRating
            })
        .ToList();

我的注册表单行,我还有另一个表 TutorStudentRequests 有多行。如何获取 TutorStudentRequests 表中列名 StudentReviewRating 的平均值?

结构可能如下所示:

注册表

RegistrationId   Name   Email 
   1             abc    abc@gmail.com
   2             xyz    xyz@gmail.com

TutorStudentRequests 表

Id  TutorId(RegistrationId of F.k.)   StudentReviewRating
 1    1                                    5
 2    1                                    2
 3    1                                    1
 4    2                                    3

我希望 UserTypeId 数据作为每个 TutorId 的 StudentReviewRating 的平均值

试过

var query = (from R in db.Registrations
        join c in db.Campus
        on R.CampusId equals c.CampusId
        from tsr in db.TutorStudentRequests.Where(t => t.TutorId == R.RegistrationId).DefaultIfEmpty()
        where R.UserTypeId == 2 && tsr.StatusId != 3
        group R by new
        {
            R.RegistrationId,
            R.Name,
            R.Email,
            R.Phone,
            c.CampusName,
            R.IsGPA,
            R.IsActive,
            R.StripeId,
            R.CreatedOn,                      
        } into groupings
        select new
        {
            RegistrationId = groupings.Key.RegistrationId,
            Name = groupings.Key.Name,
            Email = groupings.Key.Email,
            Phone = groupings.Key.Phone,
            Password = groupings.Key.CampusName,
            IsGPA = groupings.Key.IsGPA,
            IsActive = groupings.Key.IsActive,
            StripeId = groupings.Key.StripeId,
            CreatedOn = groupings.Key.CreatedOn,
            Average = groupings.Average(p=>Convert.ToDecimal(p.StudentReviewRating))
        });

但它是说注册不包含'StudentReviewRating'的定义..

怎么了?

【问题讨论】:

  • 如果您要手动编写带有联接的查询,为什么要使用 entity-framework 标签?学会使用导航属性,有问题的查询将是微不足道的。

标签: asp.net-mvc linq asp.net-mvc-4 asp.net-mvc-3 linq-to-entities


【解决方案1】:

如何按导师分组,以总评分/评分数计算平均值

var query = from request in data
            group request by request.TutorId into groupings
            let total = groupings.Sum(p=>p.StudentReviewRating)
            let number = groupings.Count()
            let average = (decimal)total/number
            select new 
            {
                TutorId = groupings.Key,
                Summary = new 
                {
                    Total = total,
                    Number = number,
                    Average = average
                }
            }

对于给定的测试用例,结果看起来像这样

TutorId Summary
1   Total   8
    Number  3
    Average 2.66
2   Total   3
    Number  1
    Average 3

编辑额外的连接和扩展组

var query = from registration in registrations
            join request in requests 
                on registration.RegistrationId equals request.TutorId
            group request by new 
            {
                registration.RegistrationId,
                registration.Name, 
                request.TutorId,
            } into groupings
            select new 
            {
                RegistrationId = groupings.Key.RegistrationId,
                TutorId = groupings.Key.TutorId,
                Average = groupings.Average(p=>p.StudentReviewRating)
            }

【讨论】:

  • 你能用我的查询说得更清楚吗?在我的查询中我添加了左连接和内连接
  • 我已经根据您的测试用例添加了结果
  • 你能看到我的更新吗,为什么我的记录没有出现在 Registrations 表中
  • 一旦按 R 分组不再可用,但 g 可用,请参阅我使用分组的示例
  • 您可以使用我的查询并使用我的查询更新您的答案
【解决方案2】:

您好,您可以在这里使用它来获取您想要的关于数学的所有信息 https://numerics.mathdotnet.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多