C # Как отсортировать список базы по порядку другого списка - PullRequest
0 голосов
/ 08 июля 2019

Как я могу отсортировать IEnumerable / List по порядку строк в другом списке?

Данные были извлечены из базы данных (с использованием EF6) для заполнения переменной.Теперь мне нужно отсортировать его на основе последовательности, в которой строки проиндексированы в списке / массиве.

Вот что у меня есть

var datasource = context.Get_The_Info_That_I_Need();
List<string> sortOrder = new List<string> { "Pending", "Ready For Pickup", "Checked Out" };

var source = datasource.ToList().OrderBy(s => sortOrder.FindIndex(x => x.Equals(s.Status.Name, StringComparison.OrdinalIgnoreCase)))
                                .ThenBy(s => s.DateRequested);

GridView1.DataSource = source;
GridView1.DataBind();

Проблема, с которой я сталкиваюсь, заключается в том, что списокне отсортировано по статусу.Мне нужно, чтобы все «ожидающие» пункты были сначала отсортированы по дате;затем «запрос предложений» отсортирован по дате;и наконец "CO", отсортированный по дате.

Я получил этот код от этого SO вопроса .

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Я предлагаю после выполнения datasource.ToList() попробовать вызвать эту функцию:

 private static List<Flight> SortListByOtherList(List<Flight> UnSortedList, List<string> SortKeys)
        {
            //replace 'object' with your flight class name
            List<Flight> SortedList = new List<Flight>();
            foreach (string Key in SortKeys)
            {
                SortedList.AddRange((from Flight in UnSortedList
                              //Here add the 'get' command of your string Time.Date instand of 'Time'
                              orderby Flight.GetTime() descending
                              //Here add the 'get' command of your string flight stutus instand of 'FlightStutus'
                              where Flight.GetFlightStutus() == Key
                             select Flight).ToList());

            }
            return SortedList;
        }

вот полный код, если вы хотите просто сделать это на основе моего кода:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Linq;
namespace ConsoleApp6
{
    public class Flight
    {
        string FlightStutus { get; set; }
        DateTime Time { get; set; }
        public Flight(string FlightStutus, DateTime Time)
        {
            this.Time = Time;
            this.FlightStutus = FlightStutus;
        }
        public DateTime GetTime()
        {
            return this.Time;
        }
        public string GetFlightStutus()
        {
            return this.FlightStutus;
        }
        public override string ToString()
        {
            return $"FlightStutus: {this.FlightStutus} Time: {this.Time}";
        }

    }
    class Program
    {
        static void Main(string[] args)
        {

            List<string> sortOrder = new List<string> { "Pending", "Ready For Pickup", "Checked Out" };
            List<Flight> ListThatNeedToGetSorted = new List<Flight>();
            ListThatNeedToGetSorted.Add(new Flight("Pending", new DateTime(2005, 12, 12, 9, 0, 0,5)));
            ListThatNeedToGetSorted.Add(new Flight("Ready For Pickup", new DateTime(2005, 12, 12, 9, 0, 0,7)));
            ListThatNeedToGetSorted.Add(new Flight("Checked Out", new DateTime(2005, 12, 12, 9, 0, 0,5)));
            ListThatNeedToGetSorted.Add(new Flight("Checked Out", new DateTime(2012, 12, 10, 9,5, 0)));
            ListThatNeedToGetSorted.Add(new Flight("Pending", new DateTime(2012, 4, 2, 11, 4, 22)));
            List<Flight> SortedList=SortListByOtherList(ListThatNeedToGetSorted, sortOrder);
            foreach (Flight Fl in SortedList)
            {
              Console.WriteLine(Fl);
            }
        }

        private static List<Flight> SortListByOtherList(List<Flight> UnSortedList, List<string> SortKeys)
        {
            //replace 'object' with your flight class name
            List<Flight> SortedList = new List<Flight>();
            foreach (string Key in SortKeys)
            {
                SortedList.AddRange((from Flight in UnSortedList
                              //Here add the 'get' command of your string Time.Date instand of 'Time'
                              orderby Flight.GetTime() descending
                              //Here add the 'get' command of your string flight stutus instand of 'FlightStutus'
                              where Flight.GetFlightStutus() == Key
                             select Flight).ToList());

            }
            return SortedList;
        }
        }
    }
0 голосов
/ 09 июля 2019

Так что мой метод работает. Я сделал критическую подделку в год. Я забыл установить источник данных в новую переменную источника. Рассматриваемый метод работает, как отмечено в комментариях к исходному вопросу.

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