Linq2DB и запрос для динамического - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь выполнить запрос, не создав модель, которая отображает его.Рассмотрим этот фрагмент

public IDictionary<string, int> GetParentelaMapping()
    {
        using (var conn = dataContextFactory.Create())
        {
            var result = conn.Query<dynamic>("SELECT ID_GRADO_PARENTELA,GRADO_PARENTELA FROM GRADO_PARENTELA")
                .ToDictionary(
                    row => (string)row.GRADO_PARENTELA,
                    row => (int)row.ID_GRADO_PARENTELA, StringComparer.OrdinalIgnoreCase);

            return result;
        }
    }

Это дает мне исключение, что Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: '' int 'не содержит определения для' GRADO_PARENTELA ''

Как я могу обработатьтакой случай?Спасибо

1 Ответ

0 голосов
/ 05 февраля 2019

К сожалению, эта функция в настоящее время не поддерживается.Для этого отследите новый выпуск # 1591 .

В качестве обходного пути я предлагаю определить дополнительный класс для чтения такого результата:

class ParentelaMapping
{
    public int ID_GRADO_PARENTELA { get; set; }
    pulbic string GRADO_PARENTELA { get; set; }
}

public IDictionary<string, int> GetParentelaMapping()
{
    using (var conn = dataContextFactory.Create())
    {
        var result = conn.Query<ParentelaMapping>("SELECT ID_GRADO_PARENTELA,GRADO_PARENTELA FROM GRADO_PARENTELA")
            .ToDictionary(
                row => row.GRADO_PARENTELA,
                row => row.ID_GRADO_PARENTELA, StringComparer.OrdinalIgnoreCase);

        return result;
    }
}

PS

linq2db разработан для лучшей работы с запросами linq, поэтому попробуйте переписать ваш запрос следующим образом:

[Table("GRADO_PARENTELA")]
class GrandoParentela
{
    public int ID_GRADO_PARENTELA { get; set; }
    pulbic string GRADO_PARENTELA { get; set; }
}

public IDictionary<string, int> GetParentelaMapping()
{
    using (var conn = dataContextFactory.Create())
    {
        var result = conn.GetTable<GrandoParentela>()
            .ToDictionary(
                row => row.GRADO_PARENTELA,
                row => row.ID_GRADO_PARENTELA, StringComparer.OrdinalIgnoreCase);

        return result;
    }
}
...