使用上下文时返回匿名类型.对象.SQL查询

本文关键字:类型 对象 SQL 查询 上下文 返回 | 更新日期: 2023-09-27 17:55:38

假设我想选择类别中返回的第一个产品,但我需要直接传递sql字符串。请注意我是如何指定上下文的。产品.SqlQuery. 我认为即使我没有在查询中选择所有产品字段,这也行得通。我真的必须选择匿名类型然后将其转换为产品吗?

我得到的错误是: 数据读取器与指定的"AppModel.Product"不兼容。类型为"InsertDate"的成员在数据读取器中没有具有相同名称的相应列。

下面是我的代码:

StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT Id, ProductName ");
sql.AppendLine("FROM Product ");
sql.AppendLine("WHERE CategoryId=@CategoryId ");
var retval = context.Products.SqlQuery(sql.ToString(),
         new SqlParameter("@CategoryId", categoryId)).FirstOrDefault();
return retval;

使用上下文时返回匿名类型.对象.SQL查询

实体框架无法从 SQL 语句的结果构造整个 Product 对象,因为您只返回这两个字段。如果您这样做,它应该有效:

sql.AppendLine("Select * ");
sql.AppendLine("FROM Product ");
...

或者,如果您手动指定了所有字段。