• Как побороть ошибку преобразования?

    @kttotto
    пофиг на чем писать
    В Вашем случае i это отложенный сложный запрос/выборка, еще невыполненный. Вы пытаетесь его преобразовать в другой тип. Попробуйте его, на всякий случай, сначала закрыть ToList(), а затем преобразовать его либо через Select, либо через Cast. В принципе, если внутри запроса ничего сложного нет, то можно и не делать ToList().
    Ответ написан
    Комментировать
  • Как реализовать метод принадлежности точки многоугольнику?

    @kttotto
    пофиг на чем писать
    Это стандартная задача геодезии по вхождению точки в полигон, решается косым умножением векторов.
    По сути, перебираются все отрезки полигона и смотрится с какой стороны отрезка лежит точка. Считаешь количество всех случаев когда она лежит справа от отрезка (т.е. пересекает при повороте), отфильтровываешь все отрезки, которые лежат выше или ниже точки. Если кол-во справа четное или ноль, значит точка в полигон не входит, если нечетное, значит лежит внутри полигона.
    Кодом решается в пять строк.

    PS: нашел свой ответ двухгодичной давности)
    Ответ написан
    3 комментария
  • Как проверить на null Vue.JS из Модели ASP.Net?

    @kttotto
    пофиг на чем писать
    Судя по тому, что Вы хотите сделать split, предполагаю, что Model.Tags имеет тип string.
    Тогда, как вариант, можно сделать так
    addTags: function() {
    	this.tags = @Json.Serialize(Model?.Tags?.Split(',') ?? []);
    }


    Ошибка в этой строке
    if(@Model != null && @Model.Tags != null)
    потому, что @Model приведется к string в разметке, а @Model.Tags вставится как строка как есть. И в разметке выйдет что-то такое
    if(System.Object != null && tag1,tag2,tag3 != null) { ... }

    Ну и понятно, что такая разметка в браузере даст ошибку. Поэтому, перед тем как вставить модель в разметку js, лучше делать сериализацию к json. Ну либо делать как-то так
    if('@(Model?.Tags ?? "")'.length > 0) { ... }
    Ответ написан
    Комментировать
  • Как передавать данные в контроллер??

    @kttotto
    пофиг на чем писать
    Думаю, что проблема в
    JSON.stringify(books)
    т.к. по сути этой строкой Вы отправляете string, а не объект. Несовпадение типа, он его и не видит.
    Если хотите в методе объект принять, не нужно его к строке преобразовывать, можно просто
    data: books,
    Но что-то мне подсказывает, что в Вашем варианте и здесь могут быть проблемы. Зачем Вы принимаете JObject?
    Преобразуете его потом, примите его как есть массивом
    public async Task<JsonResult> Settings(object[] books)

    А еще лучше, типизируйте как положено, ну а затем сделаете что-то вроде JObject.FromObject(books).

    PS:
    а метод Settings возвращает ошибку не выполняя метод.

    В таких случаях хорошо бы и текст ошибки к вопросу прикладывать.
    Ответ написан
    Комментировать
  • EF Core Загрузка трёх и более сущностей. Как правильно?

    @kttotto
    пофиг на чем писать
    1.
    Есть просто номер, который соответствует id в таблице Скана.

    Где есть номер, в какой таблице? Какая-то же связь должна быть между сотрудником и договором? Иначе просто будет невозможно соотнести запись договора с записью сотрудника.

    2. Не лучшее решение на вьюшку отдавать entity сущность. Лучше добавить модель DetailsViewModel, которую Вы заполните данными как хотите. Например
    var detailsViewModel = db.employees.Include(ep => ep.Position)                
    			.Where(j => j.Id == id)
    			.Select(emp => new EmploeeViewModel
    			{
    				Name = emp.Name,
    				Position = emp.Position,
    				Сontract = db.Contract.FirstOrDefault(c => c.Id == emp.ContractId)
    			}.FirstOrDefault();
    			
    return View(detailsViewModel);
    Ответ написан
    1 комментарий
  • Как получить данные формы в виде массива объектов?

    @kttotto
    пофиг на чем писать
    const source = { a:1, b:2, c:3 }
    const result = [];
    for(let key in source){
       const ob = {};
       ob[key]=source[key];
       result.push(ob);
    }
    Ответ написан
  • Как передать массив из c# в javascript?

    @kttotto
    пофиг на чем писать
    Судя по тэгу Вы хотите это сделать в ASP MVC приложение.
    Там есть вариант сделать это на вьюшке с помощью Razor

    <script>
    	var model = @Json.Serialize(Model.yourArray);
    	
    	var model2 = @Html.Raw(JsonConvert.SerializeObject(Model.yourArray));
    	
    	var model3 = [@Model.yourArray[0], @Model.yourArray[1], @Model.yourArray[2]]
    </script>
    Ответ написан
  • C#. Тип "Settings" уже определяет член "Save" с такими же типами параметрами. Что делать?

    @kttotto
    пофиг на чем писать
    При перегрузке методы должны отличаться сигнатурой - отличаться типом или кол-вом входящих параметров. Если при вызове метода Save Вы всегда знаете какой параметр или параметры хотите сохранить, то в Вашем случае я вижу два варианта:
    первый, если таких перегрузок требуется два-три, то каждый метод можно назвать по другому, например SaveMacDir, SaveAccpath и т.д.
    второй, если этих парметров три, то два из них сделать необязательными
    public void Save(string accpath, string macDir = null, string stId = null)
    {
    	try
    	{
    		using(var sw = new StreamWriter("**"))
    		{
    			if(!string.IsNullOrEmpty(accpath))
    			{
    				sw.WriteLine(accpath);
    				AccPath = accpath
    			}
    			if(!string.IsNullOrEmpty(macDir))
    			{
    				sw.WriteLine(macDir);
    				Macros_Directory  = macDir;
    			}
    			if(!string.IsNullOrEmpty(stId))
    			{
    				sw.WriteLine = stId;
    				SteamID = stId;
    			}
    		}
    	}
    	catch(Exception ex) { }
    }

    И вызывать их как
    Save(accpath)
    Save(accpath, macDir)
    Save(accpath, macDir, stId)
    Save(null, macDir, stId)
    Save(accpath, null, stId)
    Ответ написан
    1 комментарий
  • Запуск цикла for после нажатия на кнопку?

    @kttotto
    пофиг на чем писать
    Все зависит от того как у Вас сейчас реализовано.
    1. Если набор данных остается тот же саммый (картинки, заголовки, описание), то с помощью js просто меняется стиль, например кол-во товара на строке. Так же с помощью js можно и разметку подвигать, но лучше по уму css прописать и менять классы при смене режима просмотра.
    2. Если сами даные товаров изначально получаются ajax-ом и лежат где-то в json, то в зависимости от активной кнопки можно js-ом заполнять разные шаблоны разметки. Например, на странице два щаблона разметки, один из них display: none, второй заполняется данными. При нажатии на кнопку, меняете местами - заполняете первый блок данными, второй в display: none.
    3. Если же при смене режима кол-во и тип данных может меняться, то только ajax-ом получать данные и далее по пункту 2 или получать готовую частичную разметку и в нужный блок вставлять ее. Если фронт отдельно живет, то все так же как в пункте 2.
    Ответ написан
    Комментировать
  • Angular 2 Как сделать форму обратной связи?

    @kttotto
    пофиг на чем писать
    Фронт не должен напрямую общаться с почтовиками.
    На вашем бэке должен быть ендпоинт, который примет параметры для отправки: отправитель, текст. А у серверной части должен быть доступ к конфигам, где будет email сапорта и настройки почтовика. Вся работа по отправке почты должны быт на сервере.
    Если такого ендпоинта нет, то просите, чтобы его добавили.
    Ответ написан
  • Что изучать ADO NET или Entity Framework?

    @kttotto
    пофиг на чем писать
    Не знаю, что за "умный" модератор посчитал, что этот вопрос Стоит ли использовать ADO .NET взамен Dapper и EF Core? тоже самое, что текущий. Суть вопросов абсолютно разная, хоть у буквы у некоторых слов одинаковые. Поэтому отвечаю sergeyiljin на его вопрос.

    На все должен быть смысл. EF и Dapper (и вообще ORM) создавались не "от нечего делать", в них была потребность. Хорошая ORM в нужном месте облегчает жизнь разработчику как в разработке кода, так и в его поддержке. Сейчас наоборот стараются максимально абстрагироваться от использования чистого sql и хранимок на бд, все-таки удобнее, работать с кодом в одном месте - и дебажить, и поддерживать в разы проще. И если работаете в ООП парадигме, то удобнее чтобы данные тоже были приближены к объектному виду. Поэтому если Вы не в жестком интерпрайзе и хайлоаде, то нет смысла уходить в прошлое. Знаю один крупный банк, который год назад искал нового разраба на существующий проект документооборота, где надо было все хранимки, более 5к, и sql в коде, перевести в EF. Наверное же не просто так они приняли такое решение.
    Ответ написан
    Комментировать
  • Как вернуть Observable с агрегированным результатом других Observable?

    @kttotto Автор вопроса
    пофиг на чем писать
    Спасибо всем за соучастие. Все заработало как задумано, сам метод получился вполне рабочим, может кому реальный пример поможет. Если можно было сделать проще или "правильнее" - не стесняемся комментировать.

    PS: В чем заключалась проблема, так сказать мотивация)
    Есть внешний api, который принимает массив параметров, в ответ он возвращает один объект.
    Но на один из параметров он внутри падает с 500-ой. Как временное решение этой проблемы: сначала пытаемся получить ответ по всему массиву, если падает с ошибкой, то делаем запросы по одному, по каждому параметру, ответы собираем в один объект. Если по какому то параметру падает запрос, то вместо реального ответа возвращаем объект заглушку, без обрыва всей цепочки запросов.

    spoiler
    getUserDictByLogins(logins: string[]): Observable<UserDict> {
        if (!logins || logins.length === 0) {
          return of({});
        }
    
        return this.getUsersByLogins(logins)
          .pipe(
            map(users => {
              const userDict = {};
              users.forEach(u => userDict[u.accountName] = u);
              return userDict;
            }),
            catchError(err => {
              console.log(err.data);
              return this.getUserDictOneByOne(logins);
            })
          );
      }
    
      private getUserDictOneByOne(logins: string[]): Observable<UserDict> {
        const observables: Observable<UserDict>[] = [];
    
        logins.forEach(login => {
          observables.push(this.getUsersByLogins([login])
            .pipe(
              map(users => {
                const userDict = {};
                users.forEach(u => userDict[u.accountName] = u);
                return userDict;
              }),
              catchError(err => {
                console.log("Error getting user data: ", login);
                console.log(err.data);
                const userDict = {};
                const userBean = {
                  accountName: login,
                  displayName: login,
                  name: login,
                  fioShort: login,
                  iofShort: login
                };
                userDict[login] = userBean;
                return of(userDict);
              })));
        });
    
        return forkJoin(observables)
          .pipe(
            map((userDicts) => {
              const userDict = {};
              userDicts.forEach(u => Object.assign(userDict, u));
              return userDict;
            })
        );
      }
    Ответ написан
  • Как выключить в ангуляр удаление пробелов?

    @kttotto
    пофиг на чем писать
    Позиционирование элементов на странице не должно зависеть от пробелов и ентеров в верстке. Делайте настройку с помощью css. Вы, повидимому, сделали <h> и <p> инлановыми, что судя по контекту - неверно. Сделайте их как <label> и как <span> соответственно, добавьте нужные css правила для размера и жирности, добавьте margin-left. И тогда не придется искать костыли для неудаления пробелов в разметке.
    Ответ написан
    Комментировать
  • Почему не отображаются данные ReactJs??

    @kttotto
    пофиг на чем писать
    А где Ваш аякс запрос для получения данных? Подозреваю, что передачи в компонент параметра url getUrl="/Employee/Get" маловато. Url Вы передали, а дальше нужно сделать метод load, в котором аяксом будут подтягиваться данные. А затем при маунте компонента этот метод load вызвать.
    componentDidMount() {
            this.loadData();
        }

    Смотрю, что здесь нормально все описано.
    Ответ написан
    Комментировать
  • Как спроектировать крупное приложение на vue?

    @kttotto
    пофиг на чем писать
    Мы делали крупные проекты с vue, но это не было полноценным spa и не микросервисная архитектура. У нас просто было несколько entry, которые мы использовали для разных разделов.

    Мое мнение, если никто из вас раньше не имел дело с микросервисами, то с ходу не беритесь. Угрохаете кучу времени просто на один каркас и не факт, что все будет работать хорошо с точки зрения надежности и безопасности.

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

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

    Безболезненно переписать модуль на vue проблем нет при любых раскладах. Только если не решите на ангуляр перейти, тут я сомневаюсь, что его можно точечно использовать в проекте. У нас как то был большой легаси проект, монолит, который был на jq, мы сначала решили добавить knockout, нам не понравилось, дальше продолжали на vue.
    Ответ написан
    1 комментарий
  • Как мне с IDataReader привести к int?

    @kttotto
    пофиг на чем писать
    Во первых, у Вас неверный запрос, должно бытьSelect Count(*) From ...
    Во вторых, агрегирующая функция (та, которая возвращает только одно значение, а не кортеж) читается другим методом, conn.ExecuteScalar(...);
    Результат должен вернуть тип object, который Вы и приводите к int.
    Ответ написан
  • Какой способ подключения к БД на C# правильный?

    @kttotto
    пофиг на чем писать
    Все, что выполняет поставленную задачу - правильно. Все, что позволяет потом поддерживать и масштабировать код - еще правильней.

    В бизнес проектах через конструктор никто, конечно, код для бд не пишет. Чаще всего для мапинга с бд используют какую-нибудь ORM (EF, Dapper), руками пишут модели, которые потом будут мапиться на таблицы бд, прописывают их связи.
    Ответ написан
    3 комментария
  • Что должно быть входным параметром метода C#?

    @kttotto
    пофиг на чем писать
    Возможно надо убрать все, что не цифра ли все точки и получится "123"
    Ответ написан