如何将实体框架SqlQuery转换为实体列表?

时间:2019-03-06 17:12:52

标签: c# entity-framework

环境:VS 2017 Entity Framework 6.0

    class Program
    {
        static void Main(string[] args)
        {
            using (var ctx = new pubsEntities())
            {
                //this will throw an exception
                var employees = ctx.Database.SqlQuery<string>(@"
select * from employee;
                ").ToList();
            }
        }
    }

收到此错误:

  

{“数据读取器具有多个字段。   对EDM基本类型或枚举类型有效。“}

2 个答案:

答案 0 :(得分:1)

select * from employee

假设employee表具有多个列(id,name,dob等),那么您的查询将返回多个列。

ctx.Database.SqlQuery<string>(...)

这将尝试将这多个列投影到字符串中,这是不可能的,因此会出现错误消息。

答案 1 :(得分:1)

这取决于您的模型(类型属性名称,sql列名称等)。

如果您想使用SqlQuery

public class MyDTO {
    string p1 {get; set;}
    int p2 {get; set;}
    //...
}

var employees = ctx.Database.SqlQuery<MyDTO>(@"
    select someString as p1, someInt as p2 from employee").ToList();

否则,您可能在上下文中有一个employees表:

var employees = ctx.Employees.ToList();

var employees = ctx.Employees.Where(x => x.Name == "Doe").ToList();

如果您坚持使用string

var employees = ctx.Database.SqlQuery<string>(
    @"select someString from employee;").ToList();