在Entity Framework 6中使用SqlQuery <Dictionary <string,string >>

Akb*_*ari 5 .net c# dictionary entity-framework entity-framework-6

我正在尝试在EF 6中执行SQL查询.select查询返回两个字符串列,例如select 'a', 'b',并且可以包含任意数量的行.

我想将结果映射到字典,但我无法得到以下错误.

错误1无法将类型'System.Data.Entity.Infrastructure.DbRawSqlQuery>'隐式转换为'System.Collections.Generic.Dictionary'

这是代码:

using (var db = new EFDbContext())
{
    Dictionary<string, string> perms = new Dictionary<string, string>();
    perms = db.Database.SqlQuery<Dictionary<string, string>>(TheQuery);
}
Run Code Online (Sandbox Code Playgroud)

我已经试过各种selectToDictionary查询后,却没有一次成功.

jjj*_*jjj 12

SqlQuery如果对象具有默认构造函数和属性设置器,则可以使用直接填充对象.然后可以使用结果创建字典.例如:

public class QueryResult
{
    public string A { get; set; }
    public string B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
// the colulmn/alias names need to match property names
string query = "SELECT column1 AS [A], column2 AS [B] FROM ..."

using (var db = new EFDbContext())
{
    var perms = db.Database.SqlQuery<QueryResult>(query)
        .ToDictionary(r => r.A, r => r.B);
}
Run Code Online (Sandbox Code Playgroud)

  • 我不能用`SqlQuery <dictionary ...>`?如果我可以避免额外的课程,这将是很好的. (2认同)
  • 好吧,SqlQuery <T>的返回类型是DbSqlQuery <T>,它已经是一个集合(或者技术上是IEnumerable <T>),我认为你不想要一个字典集合.如果您已经有一个适合查询的现有类,那也可以.不幸的是,`Tuple`和`KeyValuePair`不起作用,因为它们没有默认的构造函数. (2认同)