【问题标题】:Unknown column 'Project1.ID' in 'where clause'“where 子句”中的未知列“Project1.ID”
【发布时间】:2016-05-20 14:08:58
【问题描述】:

我有以下表格

+--------+     +---------+     +---------+
| Class  |1   N| Student |1   N|  Test   |
+--------+<--->+---------+<--->+---------+
|ClassID |     |ClassID  |     |TestID   |
|Desc    |     |StudentID|     |StudentID|
+--------+     |Name     |     |Name     |
               +---------+     |Score    |
                               +---------+ 

我需要确定班级中第一个学生的总分。该学生可以有一个、多个或没有现有测试

所以结果应该是这样的

ClassDesc | StudentName | ScoreCount
----------+-------------+-----------
C1        | Max         |        201
C2        | Tom         |       null 

我有以下代码

using (myEntities ctx = new myEntities())
{
var Reslut = ctx.Class
        .Select(x => new 
        {
        ClassDesc = x.Desc,
        StudentName = x.Student.FirstOrDefault().Name,
        ScoreCount = x.Student.FirstOrDefault().Test.Sum(t => t.Score) //Error here
        }).ToList();
}

但它给了我错误

“where 子句”中的未知列“Project1.ClassID”

【问题讨论】:

  • 不错的标签,+1。你能包括你的类定义吗?
  • 知道是你。谢谢。你看过this answer吗?
  • 如果您返回新的匿名对象,您确定需要包含吗?
  • 我将 sql 语句提取到一个字符串中并且...实体框架正在创建一个无效的选择。框架错误?
  • ef 构建的无效选择语句是什么?

标签: c# mysql entity-framework linq linq-to-entities


【解决方案1】:

尝试以下方法:

var result = (from cls in ctx.Class
                           join stdt in ctx.Student on cls.ClassID equals stdt.ClassID                             
                           select new
                           {
                                  ClassDesc = cls.Desc,
                                  StudentName = stdt.Name,
                                  ScoreCount = stdt.Test.Sum(t => t.Score)
                           }).ToList();

应该生成类似于以下的 SQL:

SELECT   
    Class.ClassID,   
    Class.[Desc],  
    Student.Name,  
    (  
       SELECT  
            SUM(Test.Score)  
            FROM dbo.Test  
            WHERE Student.StudentID = Test.StudentID  
    ) AS ScoreSum  
    FROM  dbo.Class  
    INNER JOIN dbo.Student ON Class.ClassID = Student.ClassID

【讨论】:

  • 好吧,这不是解决方案,而是一个很好的解决方法——我添加了一个限制,因为类不应显示多次
猜你喜欢
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2020-06-28
相关资源
最近更新 更多