2013-12-13 24 views
0

我试图在此查询中加入一个表(db.Students),以通过加入StudentID来获取包含在查询中的名和姓。我该怎么做呢?我提出了大约50个不起作用的查询,一个只给了我想要的一半。这是我迄今为止的工作。Lambda Expression在我的查询中加入另一个表的平均值

  var gradeaverages = db.Grades 
       .Where(r => r.StudentID == r.StudentID) 
       .GroupBy(g => g.StudentID, r => r.Grades) 
       .Select(g => new 
       { 
        StudentID = g.Key, 
        Rating = g.Average() 
       }); 
     var data = gradeaverages.ToList(); 
     dataGridView1.DataSource = data; 

它确实有外键。这里是约束: 约束[FK_Grades_Students]外键([StudentID])参考文献[DBO] [生]([StudentID])

这里是我的表:

CREATE TABLE [dbo].[Grades] (
[GradeID] INT   NOT NULL, 
[StudentID] INT   NOT NULL, 
[Date]  NCHAR (10) NULL, 
[Grades] DECIMAL (18) NULL, 
PRIMARY KEY CLUSTERED ([GradeID] ASC), 
CONSTRAINT [FK_Grades_Students] FOREIGN KEY ([StudentID]) REFERENCES [dbo].[Students] ([StudentID]) 


CREATE TABLE [dbo].[Students] (
[StudentID] INT   NOT NULL, 
[First Name] NVARCHAR (40) NOT NULL, 
[Last Name] NVARCHAR (40) NOT NULL, 
[Phone]  NVARCHAR (24) NULL, 
CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED ([StudentID] ASC) 

我期待对于出把

StudentID名姓AverageGrade的(根据StudentID我假设)

+0

请问您的分贝有外键年级 - >学生呢?你使用EF吗? – Tony

+0

嗨,欢迎来到Stack Overflow。与目前的情况相比,你可以更具体地确定你想要输出的方式吗? – Baldrick

+0

你的表结构是什么样的?请告诉我们你的代码。 – IronMan84

回答

0

其实没有关于分贝结构足够的信息,但我猜你的查询可能是这样的:

var data = db.Students.Include("Grades") 
    .Select(x => new 
    { 
     StudentId = x.StudentId, 
     Rate = x.Grades.Avg(y => y.Mark) 
    }) 
    .ToList(); 

这个.Where(r => r.StudentID == r.StudentID)是没有意义的,因为你比较一些价值与自己。

或者这样

var data = db.Grades 
    .GroupBy(x => x.StudentId) 
    .Select(x => new 
    { 
     StudentId = x.Key, 
     Rate = x.Avg(y => y.Mark) 
    }) 
    .ToList(); 
相关问题