Как читать значения с разными типами данных в Entity Framework? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть запрос (простой оператор SELECT), который возвращает Id и Name, где Id is int и Name is string. Запрос возвращает результат в SSMS. Я пытаюсь получить эту запись, используя EF в моем приложении MVC. Я могу получить это значение, если я создаю собственный класс, но не использую dictionary. Второй вариант не выдает никакой ошибки, но имеет нулевую запись.

Как прочитать значение, не создавая пользовательский класс?

C # Логика:

// Option-1 = Works
var sql = @"SELECT UnitNumber, 
                   UnitName
            FROM dbo.MyTable 
            WHERE Id = @p0
            AND ScriptId = @p1";

var result = context.Database.SqlQuery<MyClass>(sql, callCenterId, id);

public class MyClass
{
    public int UnitNumber { get; set; }
    public string UnitName { get; set; }
}


// Option-2 = Doesn't Work
var sql = @"SELECT UnitNumber, 
                   UnitName
            FROM dbo.MyTable 
            WHERE Id = @p0
            AND ScriptId = @p1";

var result = context.Database.SqlQuery<Dictionary<int, string>>(sql, callCenterId, id);

SQL-запрос:

SELECT UnitNumber, 
       UnitName
FROM dbo.MyTable 
WHERE Id = 1
AND ScriptId = 10

Вывод SQL:

UnitNumber  UnitName
----------- -----------
9           Universal 

1 Ответ

0 голосов
/ 08 мая 2018

Вам необходимо спроецировать ваш набор результатов в словарь, например:

var result = context.Database.SqlQuery<MyClass>(sql, callCenterId, id)
             .ToDictionary(o => o.UnitNumber, o => o.UnitName);

или

var result = context.Database.SqlQuery<MyClass>(sql, callCenterId, id)
         .Select(x=> new KeyValuePair<int, string>(x.UnitNumber, x.UnitName))
         .ToDictionary(x=>x.Key, x=>x.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...