如何在实体框架中获得平均评级

问题描述 投票:1回答:2

嗨,我的代码如下

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    [email protected]
   2             xyz    [email protected]

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'的定义。

怎么了?

asp.net-mvc linq asp.net-mvc-4 asp.net-mvc-3 linq-to-entities
2个回答
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)
            }

0
投票

嗨,你可以用这个来拥有你想要的数学https://numerics.mathdotnet.com/

© www.soinside.com 2019 - 2024. All rights reserved.