Есть список пустых "ответов", и при ответе (Submit) создается новый объект с таким же номером (1, 2, 3 и тд), а в его свойства прописывается ID отвечающего.
Пустые с listId
null
я оставляю а не перезаписываю.
Проблема в том, что пустой ответ нужно скрыть со страницы, выводя на экран только то что имеет ID
юзера (т.е. вновь созданный) и оставшиеся пустые (которые ещё не задублированы)!
Мои решения с if/else
не помогают т.к. сразу возвращают список удовлетворив лишь одно из условий. В итоге всегда получаю или 1 нужный ответ, или все пустые, или все заполненнные + все пустые.
Фактически у ответа имеется 3 основных property:
Id
(всегда уникальное);
AnswerListId
(null
или == userId
, присваивается при добавлении ответа, едино для всего листа);
Number
(номера строк что видно на фото, идентичны у всех пользователей)
Вот пример попытки, где у меня не выводятся ненужные Null
и, но пока я не нажму подтвердить последний вопрос я не вижу ответов. После последнего Submit в списке я всё вижу как надо, и даже могу редактировать ответы.
public IEnumerable<AnswersList> GetAllAnswers(string guestId)
{
var result = _answersLists.Where(x => x.Number > 0);
foreach (var a in _answersLists)
{
var maxRows = _answersLists.Max(x => x.Number);
for (int i = 1; i <= maxRows; i++)
{
if (a.Number >= i && a.AnswersListId != null) // так выводит заполненные после последнего ответа!
result = _answersLists.Where(b => b.AnswersListId == guestId);
else result = _answersLists.Where(b => b.AnswersListId == null);
}
result = result.OrderBy(g => g.Number).ToList();
}
return result;
}
Надеюсь понял вас правильно.
Вот основной метод:
public static IEnumerable<AnswersList> GetNonDuplicateAnswers()
{
var result = _answersLists.Where(al => al.AnswersListId != null).ToList();
foreach (var list in _answersLists)
{
if (!result.Any(al => al.Number == list.Number))
{
result.Add(list);
}
}
return result.OrderBy(g => g.Number);
}
Если добавить этот код:
public class AnswersList
{
public int Number { get; set; }
public string AnswersListId { get; set; }
}
public static List<AnswersList> _answersLists { get; set; } = new List<AnswersList>()
{
new AnswersList() { Number = 1, AnswersListId = null},
new AnswersList() { Number = 1, AnswersListId = "first"},
new AnswersList() { Number = 2, AnswersListId = null},
new AnswersList() { Number = 3, AnswersListId = null},
new AnswersList() { Number = 3, AnswersListId = "second"},
new AnswersList() { Number = 4, AnswersListId = null},
new AnswersList() { Number = 4, AnswersListId = "third"},
new AnswersList() { Number = 5, AnswersListId = null},
new AnswersList() { Number = 6, AnswersListId = null},
new AnswersList() { Number = 6, AnswersListId = "fourth"}
};
static void Main(string[] args)
{
foreach (var list in GetNonDuplicateAnswers())
{
var answerId = list.AnswersListId == null ? string.Empty : list.AnswersListId;
Console.WriteLine($"Number: {list.Number} - AnswersListId: {answerId}");
}
}
Можно получить такой результат:
(Это не самое оптимальное решение и я уверен, что есть лучше, но, к сожалению, я не могу его увидеть)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Доброго времени суток программисты :3Я написал небольшую утилиту, и мне надо сделать так, что при нажатии на "закрыть" прога не закрывалась,...
Библиотека подключена, ссылка на неё есть, но почему-то самого класса и метода Init() в пространстве имён нетПомогите пожалуйста
Доброго времени суток всем! У меня такой вопрос: на aspnet mvc создаю веб приложение, регистрация проходит с помощью логина, почты и пароля
Вот таким способом отправляю пост и все работает отлично: