Сортировать список <NumberDetails>lstNumberDetails в соответствии с поиском по строке [] - PullRequest
0 голосов
/ 25 июня 2019

Я ищу данные в базе данных, используя номер типа

7892811111 8049311111 725931111

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

enter image description here

Но я хочу отобразить результат на экране в том порядке, в котором выполняется поиск числа, как если бы я искал ниже числа

7892811111 8049311111 725931111 

тогда, когда я получаю результат в числовом столбце, первая запись должна быть 7892811111, затем 8049311111, а последняя должна быть 725931111.

Когда я ищу число, оно будет сохранено в массиве. enter image description here

И когда я получаю результат, я добавляю записи в список

List<NumberDetails> lstNumberDetails = new List<NumberDetails>();
NumberDetails numDetails = new NumberDetails();
numDetails.Full_Name = dr["Full_Name"].ToString();
numDetails.Number = Convert.ToInt64(dr["Number"].ToString());
numDetails.Address = dr["Address"].ToString();
numDetails.Date = DateofRun.ToString();
numDetails.Circle = dr["Circle"].ToString();
numDetails.Operator = dr["Operator"].ToString();
lstNumberDetails.Add(numDetails);

А я присваиваю lstNumberDetails как ItemSorce из DataGrid. Так что можно сравнить Number в lstNumberDetails с массивом, потому что массив содержит порядок, в котором ищется число.

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Если вы можете изменить string[] на List<string>, чтобы вы могли использовать IndexOf метод.

Затем вы можете отсортировать другой список в соответствии с ним:

lstNumberDetails = lstNumberDetails.OrderBy(i => searches.IndexOf(i.Number)).ToList();
1 голос
/ 25 июня 2019

У меня недостаточно репутации, поэтому публикация в ответе.

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

Вы можете сделать что-то вроде этого

    public void Search(string[] searches)
    {
        List<NumberDetails> lstNumberDetails = new List<NumberDetails>();
        lstNumberDetails = GetNumbersFromDatabase();

        List<NumberDetails> gridItemSource = new List<NumberDetails>();

        foreach (var item in searches)
        {
            var modelLst = lstNumberDetails.Where(x => x.Number == item);
            if (modelLst.Any())
                gridItemSource.AddRange(modelLst);
        }

        gridName.ItemSource = gridItemSource;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...