我在下面做了原始SQL查询,只从表中选择某些字段。
{
List<CustEmpVM> CustomerVMlist = new List<CustEmpVM>();
var cid = db.Customers.SqlQuery("select SchedDate from Customer where CustID = '@id'").ToList<Customer>();
}
但我一直得到以下错误:
{em> EntityFramework.SqlServer.dll 中发生了System.Data.Entity.Core.EntityCommandExecutionException
,但未在用户代码中处理
其他信息:数据阅读器与指定的
ALFHomeMovers.Customer
不兼容。类型成员CustID
在数据读取器中没有相应的列具有相同的名称。
答案 0 :(得分:0)
使用以下查询而不是原始查询:
{
List<CustEmpVM> CustomerVMlist = new List<CustEmpVM>();
var cid = db.Customers.Where(w=>w.Id == YOURCUSTOMERID).Select(s=>new Customer{SchedDate = s.SchedDate }).ToList();
}
它将给出编译时错误而不是运行时错误。
答案 1 :(得分:0)
异常消息非常简单:查询期望返回Customer
表的完整实体但仅返回SchedDate
列,因此EF无法映射其他省略的列,包括CustID
。< / p>
假设Customers
是DbSet<Customer>
,请尝试返回Customer
中的所有字段:
// don't forget to include SqlParameter
var cid = db.Customers.SqlQuery("SELECT * FROM Customer WHERE CustID = @id",
new SqlParameter("id", "[customer_id]")).ToList();
如果您只想返回SchedDate
列,请具体化查询结果并在之后使用Select
:
var cid = db.Customers.SqlQuery("SELECT * FROM Customer WHERE CustID = @id",
new SqlParameter("id", "[customer_id]"))
.AsEnumerable().Select(x => x.SchedDate).ToList();
注意:我认为您可以根据上面的SELECT查询构建LINQ:
var cid = (from c in db.Customers
where c.CustID == "[customer_id]"
select c.SchedDate).ToList();
类似问题:
The data reader is incompatible with the specified Entity Framework