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();
我想 运行 自定义查询动态 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();