0

我在下面进行了原始 SQL 查询以仅从表中选择某些字段。

{
 List<CustEmpVM> CustomerVMlist = new List<CustEmpVM>();
 var cid = db.Customers.SqlQuery("select SchedDate from Customer where CustID = '@id'").ToList<Customer>();
}

但我不断收到以下错误: System.Data.Entity.Core.EntityCommandExecutionException发生在EntityFramework.SqlServer.dll但未在用户代码中处理

附加信息:数据读取器与指定的ALFHomeMovers.Customer. 类型的成员 ,CustID在数据读取器中没有同名的对应列。

4

2 回答 2

0

异常消息非常简单:查询应返回Customer表的完整实体,但只SchedDate返回列,因此 EF 无法映射其他省略的列,包括CustID.

假设Customers是 a 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();

类似问题:

数据读取器与指定的实体框架不兼容

于 2017-09-26T01:44:06.360 回答
0

使用以下查询而不是原始查询:

{
 List<CustEmpVM> CustomerVMlist = new List<CustEmpVM>();
 var cid = db.Customers.Where(w=>w.Id == YOURCUSTOMERID).Select(s=>new Customer{SchedDate = s.SchedDate }).ToList();
}

它会给出编译时错误而不是运行时错误。

于 2017-09-25T11:44:49.150 回答