ハインシー - ビニーのポストへのあなたのコメントで判断すると、私はあなたのポイントを見逃していると思う... [私はあなたの質問への答えとしてこれを提示していない、私はちょうどビニーのポイント。]それに関するいかなる可能な混乱アップ
このオブジェクトを考えてみましょう:
今
public class Person
{
public string FirstName;
public string MiddleInitial;
public string LastName;
public DateTime DateOfBirth { get; set; }
public int Age
{
get
{
return (int)DateTime.Today.Subtract(DateOfBirth).TotalDays/365;
}
}
}
、私は人々
var people = new List<Person>();
そしてIまし呼ばれる設定した人のリストを持っていると仮定私のリストにはたくさんの人がいます。
var sortedByLastName = people.OrderBy(o => o.LastName);
var sortedByFirstName = people.OrderBy(o => o.FirstName);
var sortedByAge = people.OrderBy(o => o.Age);
var sortedByAgeDesc = people.OrderByDescending(o => o.Age);
var sortedByLastThenFirst = people.OrderBy(o => o.LastName).ThenBy(o => o.FirstName);
これは、複雑なオブジェクト用です。私たちは、文字列のようないくつかのプリミティブ型のリスト、持っていれば:私は自分自身に基づいてそれらをソートする
var strings = new List<string>();
を -
var sorted = strings.OrderBy(s => s);
これがソートされます私のオブジェクトの一部のプロパティではない、すなわち、オブジェクト上にIComparableを実装する複雑なオブジェクトをソートして、デフォルトの比較元でソートする場合も、同じ考え方を使用することができます。
プリミティブ型でも複雑なオブジェクトでも、EntitySetは同様の方法でソートできます。
ありがとう、私は暗い路地に私を連れて行くだろうとは思わない。質問の一番下にリンクされている投稿を読んでいると、おそらくデータバインディングという点で私が見逃していることがあります。 –
他の投稿を読んだ後、彼は.ToList()を呼び出す間違いをしました。バインディング・ソースはおそらくその基礎となるリストを更新していましたが、そのリストはEntitySetではありませんでした。 .ToListを呼び出すと、新しいリストオブジェクトが作成されます。 BindingListは並べ替えをサポートしています...多少古風な形です...しかし、それは公開されなければなりません。 GetNewBindingList()によって返されたものをラップし、SortPropertyCoreおよびSortDirectionCoreを公開できるBindingListラッパーを作成する必要があります。私は例を挙げて別の答えを投稿します。 – jrista
EntitySetは、上記のGetNewBindingList()に委譲して(そしてIBindingListの結果をキャッシュして)IListSource.GetList()を実装します。 BindingSourceを使用してEntitySet をWinForms DataGridViewにバインドすると、自動的に列の並べ替えがサポートされます。 WPFについてはわかりませんが、同様に動作すると思っていたでしょう。 –
Lucas