Ответы пользователя по тегу C#
  • Automapper - Можно ли проигнорировать маппинг какого-либо свойства уже после создания карты маппинга?

    @kttotto
    пофиг на чем писать
    Я, думаю, что только создать две разные конфигурации.
    Ответ написан
    Комментировать
  • Как сделать циклический запрос к базе данных?

    @kttotto
    пофиг на чем писать
    Небольшие замечания:
    1. Перед тем как копировать сюда код, лучше его скопипастить в блокнот, там его отформатировать (удалить слева лишние табы), а потом только из блокнота копипастить сюда. Тяжело воспринимать плохо отформатированный код, особенно когда его много.
    2. Очень тяжело читать код с непонятными наименованиями. Лучше придерживаться традиции именования на нормальном английском языке. Закрепите в браузере страницу с гугл переводчиком и при необходимости перевести на английский - дело пары секунд. Никаких сокращений, поля в моделях - только первая буква большая. Некоторые наименования я так и не понял, что Вы ими обозначили.
    3. Преподаватель предмета, это пользователь, значит и привязывать надо не по его имени, а по его Id. Вместо
    var jlist = db.Jpredmets.Where(j => j.PREPODIIN == User.Identity.Name).ToList();

    лучше
    var lessons = db.Lessons.Where(j => j.TeacherId == User.Id).ToList();

    4. Дальше пытаюсь разобраться, что и как Вы хотите найти
    var pr = db.Jpredmets.FirstOfDefault(gr => gr.ID == id).GR;

    Что такое GR я так и не понял. Можно подумать, что сущность группы, но он string. Имя группы? Каждый предмет привязан к конкретной группе?

    Мой вариант как должно быть
    var group = db.Lessons.Find(l => l.Id == id).Group;

    где Group - сущность, которая связана с lesson как один-ко-многим. Примерная модель
    public class Group
    {
    	public int Id { get; set; }
    	public string Name { get; set; }    // название группы
    	public ICollection<Lesson> Lessons { get; set; }    // предметы
    	public ICollection<Learner> Learners { get; set; }  // ученики
    }

    var kont = db.Kontingents.Where(k => k.GRUPPA == pr).ToList();

    Что такое kontingents? Ученики? Тогда мой вариант выглядел бы так
    var learners = db.Learners.Where(k => k.GroupId == group.Id);

    var jocenki = db.Jpredmets.Include(t => t.Jjours).FirstOrDefault(t => t.ID == id);

    Чтотако Jjours я даже интуитивно догадаться не смог. Судя по модели, это сущность которая хранит в себе оценку, дату, когда ее поставили и т.д. Но результат Вы назвали jocenki, а оценок там не будет. Там будут предметы в которых сразу же будут подтянуты данные о Jjours. И вы опять находите предмет, который уже нашли, когда искали группу. Можно было сделать так
    var lesson = db.Lessons.Find(l => l.Id == id).Include(t => t.Jjours);
    var group = lesson.Group;

    Дальше я предполагаю, что должно быть так
    var jour = new Journalsliv();
    jour.Learners = learners;
    jour.Jjoursliv= group.Jjours;

    Это все можно было упростить, сделав так
    var group = db.Lessons.Find(l => l.Id == id).Include(t => t.Jjours).Group;
    var jour = new Journalsliv
    {
    	Learners = db.Learners.Where(k => k.GroupId == group.Id).ToList(),
    	Jjoursliv = group.Jjours.OrderBy(j => j.Date).ToList()  // на всякий случай сортируем по дате
    }

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

    Ну и главная ошибка у Вас в этом коде
    @foreach (var roc in Model.Jjoursliv)
    {
        <tr>
            <td>@roc.IIN</td>
            @foreach (var roc2 in Model.Jjoursliv)
            {
                <td>@roc2.OCENKA</td>
            }
        </tr>
    }

    Мне совсем не понятна логика хранения оценок, раз Вы пытаетесь их таким способом достать. Судя по Вашему коду Jjoursliv это коллекция Jjour, а Jjour - это одна оценка для одного ученика. И кодом выше Вы для каждого ученика выводите оценки других учеников, т.е. для каждого вы выведе одну и туже последовательность оценок других учеников, вот они у Вас и выглядят одинакого.
    Вам нужно сначала сгруппировать все оценки по имени
    var learners = Model.Jjoursliv.GroupBy(j => j.IIN)
    Так Вы получите коллекцию учеников, которая будет сосотоять из коллеции оценок.
    И тогда это можно вывести так
    @foreach (var learner in learners)
    {
        <tr>
            <td>@learner.First().IIN</td>
            @foreach (var jour in learner)
            {
                <td>@jour.OCENKA</td>
            }
        </tr>
    }

    Резюмируя, хочу порекомендовать: разобраться повнимательней что делает Include и как работает ToList() и в каких случаях он нужен; пересмотреть структуру бд, есть ошибки, поэтому возникли сложности с пониманием как нужно делать выборку.
    Ответ написан
  • Как заполнить таблицу с помощью ajax?

    @kttotto
    пофиг на чем писать
    На всякий случай проверил примеры здесь и здесь и все таки не нашел там второго параметра "name" как у Вас
    { data: "StudentGroupNumber", name:"StudentGroupNumber" },

    И я обычно добавляю <tbody></tbody>, так надежнее)
    Ответ написан
    Комментировать
  • Не удалось найти Nuget пакет. Пакет с таким идентификатором отсутствует в след источниках?

    @kttotto
    пофиг на чем писать
    Попробуйте обновить Nuget manager. Очень часто такая ошибка бывает из-за этого.
    Ответ написан
    Комментировать
  • Как сохранить данные со связью многие ко многим?

    @kttotto
    пофиг на чем писать
    EF самостоятельно создает промежуточные таблицы при отношении многие ко многим. Вам достаточно указать эту связь между таблицами Project и Person. Руками делать их нет необходимости.
    Ответ написан
    2 комментария
  • Как обрабатывать данные в wpf textbox, C#?

    @kttotto
    пофиг на чем писать
    Можно двумя способами. Первый, это по старинке в коде сделать обработчик события клика на кнопку и там внутри взять значения из текстбоксов. Второй, это сделать привязку к модели, в замле, через атрибут binding связываете контрол с моделью и на кнопку делаете привязку к команде, которая будет брать данные из модели. Об этом варианте упомянул Станислав Макаров.
    Ответ написан
    1 комментарий
  • Почему в var a = new int[1] {5} нет упаковки?

    @kttotto
    пофиг на чем писать
    Я, думаю, Вы что-то не так поняли. Массив, это ссылочный тип и в случае
    var a = new int[1] {5}
    значение переменной a будет лежать в стеке, но значением будет ссылка на место в куче, указывающая на массив интов. Тоже самое касается и
    a = new object[1] {5}

    Упаковка будет происходить со значениями, которые лежат в стеке, а потом копируются в кучу. Например так
    int a = 5;
    var b = (object)a;

    В первой строке мы положили в стек пятерку, а во второй эту пятерку мы помещаем в кучу. Переменная b будет лежать в стеке, значение которой будет указывать на адрес в куче, где лежит тип object, со значением value равным 5. И то, что у объекта поле будет интовое, не означает, что оно будет в стеке.
    Ответ написан
    7 комментариев
  • Как работать с базой данных ASP.NET MVC?

    @kttotto
    пофиг на чем писать
    Подключаться надо не к существующей таблице, а к существующей бд. Для этого надо в файле web.config указать в conectionstring путь к бд и соответствующий ей логин/пароль. Если conectionString укажете правильно, то будет соединение с ней. Только еще учтите, что все модели-сущности у Вас должны быть заранее реализованы под эту бд и соответствовать ее схеме.

    Если нужно работать с двумя бд, то создаете два контекста, каждый со своим conectionString к бд.

    Если имеется в виду, что в новой бд руками создали таблицу и заполнили данными, а бд создает ее новую и чистую, значит, где-то ошибка или в имени таблицы, или в том как Вы ее указали в DbSet.
    Ответ написан
  • Можно ли использовать несколько моделей на одной cshml странице?

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

    @kttotto
    пофиг на чем писать
    Лучше никак не добавлять, а иметь один, разделяемый обеими программами, ресурс. Как вариант - общий файлик с данными.
    Но если, все-таки, есть реальная необходимость извратиться и если говорить о windows forms, то у него есть файл ресурсов, который хранить свои данные в xml и который обычно используют как конфигурационный для запуска приложения, например для локализации приложения. Вот если Вы сможете получить доступ к этому файлу из другого приложения, то сможете его прочитать и подкорректировать как Вам нужно, сцылка. Примеров на C# как читать xml и как в него писать, в инете полно.
    Ответ написан
    Комментировать
  • Хочу "шагать" весь код C# в VS, как это осуществить?

    @kttotto
    пофиг на чем писать
    Самый простой способ, как я считаю, посмотреть что внутри, это через Решарпер и его функцию Decompile methods.
    Находится это options/External Sources и поставить все галочки внутри Navigation to Sources.

    Если без Решарпера, то чтобы дебажить исходники .net, у Вас должны быть скачаны отладочные pdb файлы. Для этого так же нужно сделать некоторые настройки в vs.
    В первую очередь желательно выставить сервер для скачки отладочных символов Tools/options/Debugging/Symbols ставим галочку Microsoft Symbol Servers, можно тут же указать папку для кеширования Ваших символов и нажать кнопку Load all Symbols, чтоб они лишний раз не подгружались каждом запуске проекта.
    Дальше идем в Tools/options/Debugging/General и выставляем галочки Enable .NET Framework source stepping. У Вас сразу спросят, подгрузить ли отладочные символы, на что Вы соглашаетесь. При этом у Вас отключиться опция "только мой код".

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

    Недавно я на это вопрос уже отвечал тут
    Ответ написан
    2 комментария
  • Как тестировать методы работающие с приватными или защищенными полями?

    @kttotto
    пофиг на чем писать
    1. Не верно. Вы будете использовать GetWorkers, но тестировать AddWorker. На GetWorkers можете написать отдельный тест.

    PS: Тестировать приватные поля плохая практика. Тестировать нужно ожидаемое поведение доступного из вне метода, т.е. публичные. Тестировать внутреннюю реализацию не нужно, нужно тестировать то, что она даст на выходе.
    Ответ написан
    Комментировать
  • Алгоритм расстановки позиций чисел в игре "пятнашки" - выводит -1. В чём ошибка?

    @kttotto
    пофиг на чем писать
    Самый нормальный способ перемешать, это в готовом массиве в цикле брать порядковый элемент и менять его местами с рандомным. Зачем Вам головняк с двойным циклом?
    var rnd = new Random();
    var arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ];
    for(var i; i < arr.Length; i++)
    {
    	var newPosition = rnd.Next(arr.Length);
    	var temp = arr[newPosition];
    	arr[newPosition] = arr[i];
    	arr[i] = temp;
    }


    PS: А для того, чтобы понять что в массиве есть такое число или нет, можно применить linq
    t_numbers.Any(x => x == number)
    И никогда не делайте эту штуку внутри метода
    Random random = new Random();
    Это угрожает созданием одинаковых последовательностей. Объект Random должен быть полем класса, причем статическим.
    Ответ написан
    Комментировать
  • Как правильно сделать выборку в этом запросе на asp.net core 2.0? web api?

    @kttotto
    пофиг на чем писать
    var get_like = db.Like.Where(t => t.Text == 'mytext' && t.Two == 'd').Count();
    или
    var get_like = db.Like.Count(t => t.Text == 'mytext' && t.Two == 'd');
    Ответ написан
    Комментировать
  • Правильна ли реализация наследования синглтона?

    @kttotto
    пофиг на чем писать
    Я пользуюсь такой конструкцией, проверенной временем
    public class Singleton<T> where T : class
    {
    	private static readonly Lazy<T> _instance = new Lazy<T>(() => (T)typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, null, new Type[0], null).Invoke(null), true);
    
    	public static T Instance => _instance.Value;
    }
    
    public sealed class CustomSingleton : Singleton<CustomSingleton>
    {
    }
    
    var single = CustomSingleton.Instance
    Ответ написан
    Комментировать
  • Как обращаться к конкретному элементу списка по двум ключам без перебора списка?

    @kttotto
    пофиг на чем писать
    Можно слегка извратится и сделать индексатор. Что-то подобие этого
    public class Pixel
    {
    	public int X {get;set}
    	public int Y {get;set}
    	public string Text {get;set}	
    }
    
    public class LPixels
    {
    	public List<Pixel> ListPixels = new List<Pixel>();
      
    	public Pixel this[int x, int y]
    	{
    		get
    		{
    			return ListPixels.FirstOrDefault(px => px.X == x && px.Y == y);
    		}
    		set
    		{
    			var point = ListPixels.FirstOrDefault(px => px.X == x && px.Y == y);
    			if(point != null)
    			{
    				point.Text = value.Text;
    			}
    			else
    			{
    				var newPoint = new Point
    				{
    					X = x;
    					Y = y;
    					Text = value.Text;
    				}
    				
    				ListPixels.Add(newPoint);
    			}			
    		}
    	}
    }
    
    var lpixels = new LPixels();
    var result = lpixels[1, 2];
    lpixels[1, 2] = new Point { Text = "Test" };
    Ответ написан
    Комментировать
  • Как посмотреть исходный код .NET в Visual studio?

    @kttotto
    пофиг на чем писать
    Options/Debugging/General поставить галочку в "enable .net framework source stepping". Сразу начнется закачка PDB файла с исходниками. Учтите только что весят они не мало, и нужно будет достаточно места на жестком.

    PS: Если Вы хотите дебажить .net, то нужно сделать Эти настройки.
    Если же Вы хотите просто навигацию по исходнику, тот тут сложнее. Для нормальной навигации нужны ссылки в метаданных на исходники. Это сделали только для core2, но со временем обещают добавить для всех версий. Лично я пользуюсь в решарпере настройкой "navigation to source/decompile methodes", но как вариант есть расширение для vs Ref12, в этом случае, при got to defition в браузере открывается страница на https://referencesource.microsoft.com с исходником.
    Подробнее здесь
    Ответ написан
    Комментировать
  • Как использовать метод Sort list'а содержащего экземпляры структуры?

    @kttotto
    пофиг на чем писать
    Комментировать
  • Почему нельзя присвоить новое значение переменной в классе?

    @kttotto
    пофиг на чем писать
    Потому, что синтаксис языка C# этого не разрешает.
    Ответ написан
    Комментировать
  • Почему не получается обновить одно поле в EF?

    @kttotto
    пофиг на чем писать
    Вы ее присоединили к контексту, но обновления не происходит. Попробуйте явно указать, что модель модифицирована
    this.Db.Entry(Phone).State = EntityState.Modified;
    this.Db.SaveChanges();
    Ответ написан
    Комментировать