Как сохранить один список вместо нескольких списков с помощью linq? - PullRequest
0 голосов
/ 07 июня 2019

Я должен заказать список значений. Где первое значение должно остаться прежним. Остальные значения следует упорядочить по убыванию.

Например:

list <> repository = {"автомобиль", "велосипед", "самолет", "поезд", "корабль"};

После заказа список исключает результат:

repository = {"автомобиль", "поезд", "корабль", "велосипед", "самолет"};

Как я могу упростить код? Без использования более двух переменных списка.

       List<Automobile> vehicle = new List<Automobile >();
       List<Automobile> vehicle1 = new List<Automobile>();
       List<Automobile > vehicle2 = new List<Automobile>();

            using (var entity = new AutomobileEntity())
            {
              vehicle = (from details in entity.dbVechiles.Where(i => i.IsActive == true)
                         join sp in entity.dbSpeed.Where(i => i.IsActive) on details.vspeed equals sp.vspeed
                         select new Automobile
                         {
                           Vid = details.vId,
                           VName = details.vName,
                           Vspeed = sp.vspeed,
                           VRate = sp.vrate
                         }).ToList();
            }

  vehicle1 = vehicle.Where(x => x. VName == "BMW").OrderByDescending(x => x. Vid).ToList();
  vehicle2 = vehicle.Where(x => x. VName != "BMW").OrderByDescending(x => x. Vid).ToList();

  vehicle1.AddRange(vehicle2);

  return vehicle1;

Ответы [ 6 ]

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

Я не уверен, что именно вы хотите, но вот способ заказать список, но сохранить первый там:

List<string> repository = new List<string>{ "car","bike","airplane","train","ship"};
repository = repository.Skip(1).OrderBy(value => value).Prepend(repository.First()).ToList();

Редактировать: Только что видел, что @Mr.Белис был немного быстрее с подобным решением, но если вы используете функцию «.Union», вы должны знать, что это также вызовет отчетливое в вашем списке.Таким образом, дубликаты в вашем списке будут удалены.

1 голос
/ 07 июня 2019
List<string> repository = new List<string>(new[] { "car", "bike", "airplane", "train", "ship" });
var result = repository.Take(1).Union(repository.Skip(1).OrderByDescending(x => x));

возвращает

{"машина", "поезд", "корабль", "велосипед", "самолет"}

, поэтому в вашем случае используйте

поэтому в вашем случае используйте return

vehicle.Take(1).Union(vehicle.Skip(1).OrderByDescending(x => x.Vid));

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

var result = repository.Take(1).Concat(repository.Skip(1).OrderByDescending(x => x));
1 голос
/ 07 июня 2019

Вы можете заменить:

vehicle.Where(x => x. VName == "BMW").OrderByDescending(x => x. Vid).ToList();
vehicle.Where(x => x. VName != "BMW").OrderByDescending(x => x. Vid).ToList();

с:

vehicle.OrderBy(x => x.VName == "BMW").ThenByDescending(x => x.Vid).ToList();
0 голосов
/ 07 июня 2019

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

repository.OrderBy(x=> x!= repository.First()).ThenByDescending(x=>x);
0 голосов
/ 07 июня 2019

Это можно сделать одним запросом, хотя я не уверен в использовании ключевых слов LINQ.

var list = new List<string> {"car", "bike", "airplane", "train", "ship"};

list = (from x in list
      let firstItem = list.First()
      orderby x descending
      orderby x != firstItem
      select x).ToList();
0 голосов
/ 07 июня 2019

Таким образом:

using (var entity = new AutomobileEntity())
{
    return (from details in entity.dbVechiles.Where(i => i.IsActive == true)
               join sp in entity.dbSpeed.Where(i => i.IsActive) on details.vspeed equals sp.vspeed
               select new Automobile
               {
                   Vid = details.vId,
                   VName = details.vName,
                   Vspeed = sp.vspeed,
                   VRate = sp.vrate
               }).OrderBy(x => x.VName).ThenByDescending(x => x.Vid).ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...