代码之家  ›  专栏  ›  技术社区  ›  Whirlwind

如何将列表中间的项目放在第一位?

  •  1
  • Whirlwind  · 技术社区  · 6 年前

    我有一份装订清单:

    BindingList<partner> partnerList = _context.partner.Local.ToBindingList();
    
    this._view.PartnerDatasource.DataSource = partnerList;
    

     public  void Swap<T>(IList<T> list, int indexA, int indexB)
            {
                T tmp = list[indexA];
                list[indexA] = list[indexB];
                list[indexB] = tmp;
            }
    

    然后:

     this.Swap(partnerList, 0, partnerList.Count - 1);
    

    当涉及到交换时,这是可行的,但是它以某种方式完全弄乱了实体框架,当我尝试使用这些实体(合作伙伴)时,我进一步得到了各种错误。。。

    有什么合适的方法可以做到这一点?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Han    6 年前
    var names = new [] { "Alice", "Bob", "Charlie", "Dave", "Eve" };
    var specialName = "Eve";
    
    var sortedNames = names.OrderByDescending(x => x == specialName);
    foreach (var name in sortedNames)
        Console.WriteLine(name);
    

    结果:

    Eve
    Alice
    Bob
    Charlie
    Dave
    
        2
  •  3
  •   Ashkan Mobayen Khiabani    6 年前

    partnerList.OrderByDesending(x=> x.someProperty == Something); 
    

    或者如果您需要按索引排序:

      partnerList.Select((item ,i) => new { item , neworder = i == index ? 0 : 1})
               .OrderBy(x=> x.neworder).Select(a=> a.item); 
    

    Live Demo

        3
  •  0
  •   A_Sk    6 年前

    Move(Int32 oldIndex, Int32 newIndex) 方法,但ObservableCollection可以。

    因此,您可以做的是,首先将该列表转换为ObservableCollection,然后尝试使用 .Move(Int32 oldIndex, Int32 newIndex) 方法。

    using System;
    using System.Collections.ObjectModel;
    using System.Collections.Generic;
    
    public class Program
    {
        public static void Main()
        {
    
            List<Partner> partenrs=new List<Partner>();
            partenrs.Add(new Partner(){Name="A"});
            partenrs.Add(new Partner(){Name="B"});
            partenrs.Add(new Partner(){Name="C"});
            partenrs.Add(new Partner(){Name="D"});
            partenrs.Add(new Partner(){Name="E"});
            partenrs.Add(new Partner(){Name="F"});
    
            var obser=new ObservableCollection<Partner>(partenrs);
    
            obser.Move(0,5);
            foreach(var x in obser)
            {
                Console.WriteLine(x.Name);
            }
        }
    }
    
    class Partner
    {
        public string Name{get;set;}
    }