简体   繁体   English

将SQL查询转换为使用AggregateFunctions和Where子句的实体框架

[英]Convert SQL query to Entity Framework which used AggregateFunctions and Where clause

How can I convert this query to Entity Framework? 如何将该查询转换为实体框架?

SQL query: SQL查询:

SELECT Fullname, SUM(CoinCount+DiamondCount) AS GeneralPoint
FROM Students, Groups
WHERE Students.GroupId = Groups.Id AND Groups.Name = 'FSDA_1813_az'
GROUP BY Fullname
ORDER BY GeneralPoint

Entity: 实体:

public class Student
{
    public int Id { get; set; }
    public int GroupId { get; set; }
    public string Fullname { get; set; }
    public Nullable<int> DiamondCount { get; set; }
    public Nullable<int> CoinCount { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
    public string Education { get; set; }
    public string Email { get; set; }
    public System.DateTime Birthdate { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public Nullable<System.DateTime> LastVisited { get; set; }
    public string Facebook { get; set; }
    public string Linkedin { get; set; }
    public string SocialMedia { get; set; }
    public byte[] Photo { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Comment> Comments { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Exam> Exams { get; set; }
    public virtual Group Group { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Point> Points { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<StudentHomework> StudentHomeworks { get; set; }
}

UserRepository: UserRepository:

public ICollection<Student> GetUsersForGroup(string group)
{
    using (var db = new EFContext())
    {
        var temp = db.Students.Where(x => x.Group.Name == group).ToList();

        // I have to sort students in group by their DiamondCount+CoinCount as new GeneralCount
        temp = temp.OrderBy(x => );
    }
}

I have to sort students for their general point (DiamondCount+CoinCount). 我必须对学生的一般点(DiamondCount + CoinCount)进行排序。 But I can't send LINQ query by using Entity Framework. 但是我无法使用实体框架发送LINQ查询。 How can I do this? 我怎样才能做到这一点?

Not tested but it should work: 未经测试,但应该可以工作:

 var result = db.Students.Where(x => x.Group.Name == group)
            .GroupBy(g => g.Fullname)
            .Select(i => new
            {
                FullName = i.Key,
                GeneralPoint = i.Sum(s => s.DiamondCount + s.CoinCount)
            })
            .OrderBy(o => o.GeneralPoint)
            .ToList();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM