1

MyPersonObjects の List<> があります。リストは、私が何かを割り当てることができる人々のリストです。このリストには、私自身が含まれています (タスクは私に割り当てられるため、通常は割り当てられます)。

ですから、自分がリストの一番上にいることを確認したいと思います。私は自分の person オブジェクトのプロパティである自分の personId を知っています。リストを順序付けて、自分が最初であり、残りが姓のアルファベット順であることを確認する方法はありますか (これは私のオブジェクトの別のプロパティです)。

4

2 に答える 2

6

2 つの別々の基準でリストをOrderBy並べ替えることができます。値が等しい場合 (自分以外はすべて 1)、それが主な並べ替え順序になりますThenBy

personList.OrderBy(x => x.Id == myId ? 0 : 1)
           .ThenBy(x => x.Surname);
于 2012-08-26T06:50:21.550 に答える
3

1 つの方法は、Linq を使用して姓でリストを並べ替えてから、自分自身を削除して最初の場所に戻すことです。

var personList = db.MyPersonObjects.OrderBy(p => p.Surname).ToList();
var myself = personList.Single(p => p.Id == myselfId);
personList.Remove(myself);
personList.Insert(0, myself);

IComparer<MyPersonObject>または、実装が次のようなカスタム比較子を作成します。

public class PersonCompaper : IComparer<MyPersonObject>
{
    private readonly int personId;

    public PersonCompaper(int personId)
    {
        this.personId = personId;
    }

    public int Compare(MyPersonObject x, MyPersonObject y)
    {
        if (x.Id == personId && y.Id == personId)
           return 0;
        if (x.Id == personId)
            return 1;
        if (y.Id == personId)
            return -1;            
        return string.Compare(x.Surname, y.Surname);
    }
}

次に、それを OrderBy で使用します

db.MyPersonObjects.OrderBy(p => p, new PersonCompaper(myselfId))
于 2012-08-26T06:38:51.157 に答える