我想在未建模的动态表或视图上运行自定义查询
我总是需要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是Modeled的,我希望它具有动态性,并在运行时添加任何其他视图,我尝试了以下操作,但无法获取
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);
}
}
答案 0 :(得分:0)
我假设您有支持json输出的现代SQL Server。通过在sql-query之后添加 for json路径 表达式,可以将结果检索为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();