• Как передать динамический текст в switch-case?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    switch (path)
    {
        case not null when string.Equals($"{context.Culture}/some-page", path):
            break;
    }
    Ответ написан
    Комментировать
  • Как передать динамический текст в switch-case?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Switch работает только со статическими данными, а не выражениями
    Ответ написан
    4 комментария
  • Как загнать в dictionary key как null?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Условный оператор в возвращаемом выражении в лямбде в GroupBy формально имеет тип результата int?, и у ситаксического анализатора при выводе типа возвращаемого значения не хватило то ли мозгов догадаться, что результат не может быть null, то ли полномочий изменить тип возвращаемого выражения на int.
    Упростите ему задачу: используйте операцию объединения с null (?? - null-coalescing), тип ее результата гарантированно не-nullable:
    asd.Value?.GroupBy(x => x.ParentId??0 ).ToDictionary(gg => gg.Key, gg => gg.ToList());
    Ответ написан
    Комментировать
  • Как работает пул потоков при ассинхронных запросах?

    @qandak
    Архитектор
    ... ждать окончания других запросов.


    Надо понимать, что пул как абстракция по своей сути подразумевает очередь и ожидание. Если метод логин ходит в базу на другой хост, который имеет на данный момент свои проблемы, ждать определенное время надо будет по-любому, независимо от состояния пула. Если это обычный логин с условным редисом - юзер не почувствует разницу, будь там 5 тысяч запросов или пятнадцать.

    Пул потоков виртуальной машины (CLR, JVM, etc.) или JIT - это виртуализация над пулом потоков ОС. ОС в свою очередь распределяет задачи с помощью своего планировщика на реальные потоки железа. В случае двухядерного ЦП с гипертредингом - 4. То есть, замечаем мы это или нет, ожидания и очереди есть всегда и везде.

    Что касается случая с контроллером запросов, тут всё зависит от фреймворка и конфигураций. Отклонить сразу, отклонить по таймауту, или врапить в виртуальный поток. У JVM был такой Project Loom, позволяющий создавать миллион потоков без ограничений ОС (включено в JDK начиная с версии 12).
    Ответ написан
    Комментировать
  • Как вытащить body из html через HttpClient?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Нужно распарсить страничку через AngleSharp например.
    НО
    Хочу достать со страницы сайта весь контент и заменить заменнить определенные слова.

    Тебе тогда весь документ и нужен, а не один только body.
    Ответ написан
    Комментировать
  • Почему компилятор не может прочитать значения из appsettings?

    Nipheris
    @Nipheris Куратор тега C#
    Видимо нужно вот так:
    var asd = config.VendorConfigs.Where(x => x.IntegrationServiceId == vendorId).First();
    Ответ написан
    Комментировать
  • Как такой запрос интерпретируется в код?

    @Rayvor
    Свойство Location в Request должно иметь тип List<string> или string[] Для удобства можно использовать отдельный тип с Latitude, Longitude в бизнес логике, а для ответа маппить его в тип выше
    Ответ написан
    Комментировать
  • Как перенести PDF-файл из таблицы в Blob?

    Общий алгоритм:
    1. выполняем SELECT постранично (допустим, по 1-5 записей, чтобы не грузить всё в память)
    2. для каждой записи поблочно (скажем, по 64KB) читается поле BLOB, каждый из таких блоков при помощи Page Blob загружает на хранилище.
    3. делаем другие операции, по необходимости.
    Ответ написан
    Комментировать
  • Как вывести значения отдельно для всех?

    @oleg_ods
    Посмотри внимательно на эту строку =)
    ReferenceFieldName = refItemList.First().Value.ReferenceFieldName


    И на сколько я понял нужен еще один foreach по коллекции refItemList
    Ответ написан
    2 комментария
  • Можно ли вместо Delete-метода использовать POST?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Да, так можно сделать.
    Только не сервере не забудь код поправить.

    Если бы серверную часть писал я, то я бы подумал над редизайном этой апишки, ибо принимать кучу query-параметров для удаления - это странно и не соответствует идеям rest.
    Ответ написан
    Комментировать
  • Как посчитать по двум полям SQL Server?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    SELECT (SELECT COUNT(*)
              FROM sp
              WHERE ([some] = 1)) AS SomeCount,
           (SELECT COUNT(*)
              FROM sp
              WHERE ([some] = 1) AND (noone = 1)) AS NooneCount
    Ответ написан
    Комментировать
  • Как вытянуть строчку с пробелом и первым символом?

    GavriKos
    @GavriKos
    Ну откройте мануал по функции split, и по индексированию в строках (обращению к первому символу). Можно еще конкатенацию строк читануть.

    Код настолько простой что писать его за вас даже стыдно.
    Ответ написан
    4 комментария
  • Как определить время запросов EF Core?

    @oleg_ods
    Включить логгирование запросов. тыц
    Ответ написан
    Комментировать
  • Как определить время запросов EF Core?

    Geminix
    @Geminix
    Фуллстек nuxt, .net разработчик
    Как вариант:
    1. Напишите тест, который засидит локальную бд большим количеством данных
    2. После сидинга включаете какой-нибудь Stopwatch 3. Выполняете нужный запрос
    4. Останавливаете Stopwatch, смотрите время
    Ответ написан
    Комментировать
  • Как с одного массива данных внести данные из другого?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Если я всё правильно понял, то вот:

    Исходные данные:
    FirstReportInvoiceDal[] firstReportInvoice =
    {
        new () { Id = 1, Number = "" },
        new () { Id = 2, Number = "" },
        new () { Id = 3, Number = "" },
        new () { Id = 4, Number = "" },
        new () { Id = 5, Number = "" },
    };
    SecondReportInvoiceDal[] secondReportInvoice =
    {
        new () { FirstReportId = 1, Number = "1111N" },
        new () { FirstReportId = 2, Number = "2222N" },
        new () { FirstReportId = 3, Number = "3333N" },
        new () { FirstReportId = 4, Number = "4444N" },
        new () { FirstReportId = 5, Number = "5555N" },
    };


    Вывод:
    Id: 1, Number: 1111N
    Id: 2, Number: 2222N
    Id: 3, Number: 3333N
    Id: 4, Number: 4444N
    Id: 5, Number: 5555N


    namespace ConsoleApp;
    
    class Program
    {
        public static void Main(string[] args)
        {
            FirstReportInvoiceDal[] firstReportInvoice =
            {
                new () { Id = 1, Number = "" },
                new () { Id = 2, Number = "" },
                new () { Id = 3, Number = "" },
                new () { Id = 4, Number = "" },
                new () { Id = 5, Number = "" },
            };
            SecondReportInvoiceDal[] secondReportInvoice =
            {
                new () { FirstReportId = 1, Number = "1111N" },
                new () { FirstReportId = 2, Number = "2222N" },
                new () { FirstReportId = 3, Number = "3333N" },
                new () { FirstReportId = 4, Number = "4444N" },
                new () { FirstReportId = 5, Number = "5555N" },
            };
    
            ReportRow[] rows = CreateReportRows(firstReportInvoice, secondReportInvoice);
            Display(rows);
        }
    
        private static void Display(IEnumerable<ReportRow> rows)
        {
            foreach (ReportRow row in rows)
            {
                Console.WriteLine(row);
            }
        }
    
        static ReportRow[] CreateReportRows(FirstReportInvoiceDal[] firstReportInvoice,
            SecondReportInvoiceDal[] secondReportInvoice)
        {
            // Для быстрого поиска делаем словарь с ключом SecondReportInvoiceDal.FirstReportId,
            // который соответствует ключу FirstReportInvoiceDal.Id.
            var secondReportSet = secondReportInvoice.ToDictionary(x => x.FirstReportId);
    
            // Для каждого firstReportInvoice сделать трансформацию (LINQ метод Select)
            return firstReportInvoice.Select(x =>
            {
                var row = new ReportRow
                {
                    Id = x.Id,
                    Number = secondReportSet[x.Id].Number
                };
                return row;
                // Вызываем ToArray, чтобы запустилось выполнение трансформации в методе Select.
                // И чтобы в принципе мы вернули данные, а не итератор.
            }).ToArray();
        }
    }
    
    class FirstReportInvoiceDal
    {
        public int Id { get; init; }
    
        public string Number { get; init; }
    }
    
    class SecondReportInvoiceDal
    {
        public int FirstReportId { get; init; }
    
        public string Number { get; init; }
    }
    
    class ReportRow
    {
        public int Id { get; init; }
    
        public string Number { get; init; }
    
        public override string ToString()
        {
            return $"Id: {Id}, Number: {Number}";
        }
    }
    Ответ написан
    1 комментарий
  • Какие книги посоветуете jun/middle?

    @vitaly_il1
    DevOps Consulting
    У меня вопрос, с чего можно начать читать? В какую сторону смотреть?

    ИМХО, не книги - а статьи с описанием троублешутинга и решения похожих проблем.

    Меня больше интересует типу "добавление в ширину

    HPA

    Если действительно проблема с CPU/RAM, то ключевые слова - pods sizing, limits, HPA, VPA.
    Ответ написан
    Комментировать
  • Как понять в коде сложность алгоритма?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Понимать сложность алгоритмов - сложно. В общем случае глядя на исходних достаточно трудно сказать какое там o(n). Особенно если есть рекурсии и предикаты которые срабатывают с вероятностью которую мы не знаем.

    Вообще, нарабатывая опыт. Например обход элементов квадратной матрицы имеет квадратичную стоимость а обход куба - кубическую. Это из простого. Шаблоны дихотомического поиска почти всегда содержат в основе своей формулы логарифм по основанию 2. И комбинаторные алгоритмы (сочетания и перестановки) - практически всегда содержат в своей основе n под факториалом.

    Кстати если формула содержит суперпозицию факториала и полинома - то полином можно выкинуть. Т.к. в сравнении пределов факториал улетает в бесконечность быстрее и соотв. решение зависит только от факториала.

    Я не очень понимаю зачем для собеседования знать оценку неизвестных алгоримов. Я прошел не один десяток интервью и меня никогда никто не просил оценить сложность неизвестного алгоритма.

    По поводу Дональда Кнута. Ничего он не поймет. Кнут писал 40 лет назад. Писал про железо которого уже не существует (ленточные накопители) и продавливал свои идеи алгоритмизации на ограниченном числе ресурсов. Кнут просто издевается над современным читателем имеющим ноутбук и смартфон тем фактом что заставляет изучать несуществующий компьютер MMIX (это такая себе машинка-калькулятор вроде Феликса или Энигмы, такие вот у меня ассоциации) и под него-же писать и читать код. Ну кому это надо!

    Сегодня я снимаю шляпу перед тем трудом который он сотворил. Но если студент хочет ПРОСТО освоить тему оценок сложностей алгоритмов то можно взять что-то более быстрое и эффективное. Вирт. Седжвик. Даже Кормен.
    Ответ написан
    Комментировать
  • Как понять в коде сложность алгоритма?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Так или иначе придется считать количество операций. Иногда это просто, когда там тупо вложенные циклы с фиксированным количеством итераций. Иногда придется пораскинуть мозгами. Например, можно понять сколько уровней будет у рекурсивного вызова и как много операций на каждом уровне происходит. Логарифмы обычно вылезают от деления данных пополам. Когда просят сделать что-то быстрее то надо подумать а нельзя ли тут применить какую-то структуру данных. Например, можно ли BST заменить хеш таблицей.
    Ответ написан
    Комментировать
  • Как понять в коде сложность алгоритма?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Мат. анализ и практика программирования помогают в этом. Да, это большие области знаний.

    Кратко можно ознакомиться здесь:
    https://ru.wikipedia.org/wiki/«O»_большое_и_«o»_малое

    P.S. Простого ответа нет. Никто не говорил, что будет легко. Даже есть поговорка: тяжело в учении - легко в бою. Ну а если в учении легко, то в бою - верная смерть.
    Ответ написан
    Комментировать
  • Как объединить списки из двух файлов?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Кажется, тебе нужно что-то типа такого:
    var clients = GetClients(); // Каким-то образом получили клиентов
    var accounts = GetAccounts(); // Каким-то образом получили список счетов
    
    var clientsWithAccounts = (
        from client in clients
        let accountsForClient = accounts.Where(account => account.ClientId == client.Id).ToArray() // Предполагаем, что у счёта есть какой-то идентификатор клиента, по которому его можно сопоставить. И что у одного клиента может быть несколько счетов
        select new { Client = client, Accounts = accountsForClient }).ToArray();

    Ещё то же самое можно сделать через SelectMany. А если у каждого клиента всегда ровно один счёт - через Join
    Ответ написан
    3 комментария