使用context.Object.SqlQuery时返回匿名类型

时间:2015-06-11 19:30:18

标签: c# sql linq entity-framework

让我们说我想选择一个类别中返回的第一个产品,但我需要直接传递一个sql字符串。请注意我是如何指定context.Products.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;

1 个答案:

答案 0 :(得分:2)

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

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

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