Отфильтровать и вернуть коллекцию List С#

222
11 июня 2022, 03:50

Есть список пустых "ответов", и при ответе (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;
}

Answer 1

Надеюсь понял вас правильно.
Вот основной метод:

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}");
    }
}

Можно получить такой результат:

(Это не самое оптимальное решение и я уверен, что есть лучше, но, к сожалению, я не могу его увидеть)

READ ALSO
WinForms C# Перемещение проги в панель скрытых приложений

WinForms C# Перемещение проги в панель скрытых приложений

Доброго времени суток программисты :3Я написал небольшую утилиту, и мне надо сделать так, что при нажатии на "закрыть" прога не закрывалась,...

259
Xamarin.FormsMaps.Init() не существует

Xamarin.FormsMaps.Init() не существует

Библиотека подключена, ссылка на неё есть, но почему-то самого класса и метода Init() в пространстве имён нетПомогите пожалуйста

247
Добавить новые поля при редактировании профиля C# .net MVC

Добавить новые поля при редактировании профиля C# .net MVC

Доброго времени суток всем! У меня такой вопрос: на aspnet mvc создаю веб приложение, регистрация проходит с помощью логина, почты и пароля

223
Telegram API Пост с несколькими картинками

Telegram API Пост с несколькими картинками

Вот таким способом отправляю пост и все работает отлично:

244