Entity Framework 6 Пользовательский запрос к IDictionary - PullRequest
1 голос
/ 17 марта 2019

Я хочу выполнить пользовательский запрос к динамической таблице или представлению, которое не смоделировано

Мне всегда нужна 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);   
   }
}

1 Ответ

0 голосов
/ 17 марта 2019

Я предполагаю, что у вас есть современный SQL Server, который поддерживает вывод json. Результат можно получить как json, добавив для пути json выражение после вашего sql-запроса. Результат дается в виде строки 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();
...