Entity Framework 6 对 IDictionary 的自定义查询

Entity Framework 6 Custom query to IDictionary

我想 运行 自定义查询动态 table 或未建模的视图

我总是需要 1 条记录,但不知道字段名称

有时可能是 view_1、view_2、table_1 等

我需要密钥对值 (IDictionary<string,string>)

中的结果

我当前的代码是

view_student1 v1= db.view_student1 .Where(e => e.rollNo==1).FirstOrDefault();
var json = JsonConvert.SerializeObject(v1);
return JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

但在上面的代码中 view_student1 是建模的,我想要这个动态并在 运行 时添加任何其他视图,我尝试了以下但无法获得

string sql = "Select * from "+viewName+" where rollNo = '"+ rollNo+"'";
var student = db.Database.SqlQuery<dynamic>(sql).ToList();

IDictionary<string, string> strings = new Dictionary<string, string>();
foreach (var std in student ) {
   //dont know how to get all field names/values here    
   foreach (var fld in std) {      
       strings.Add(fld.Key,fld.value);   
   }
}

我假设您拥有支持 json 输出的现代 SQL 服务器。通过在 sql 查询后添加 for json path 表达式,可以将结果检索为 json。结果以包含对象数组的 json 字符串给出。

以下解决方案使用 json-to-dictionary 反序列化,您可以从 Json.NET.

获得
string sql = "Select * from "+viewName+" where rollNo = '"+ rollNo+"' for json path";

var student = db.Database.SqlQuery<string>(sql).FirstOrDefault();

IDictionary<string, string> strings  = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(student).First();