次のようなLinqステートメントで(質問に関連する部分に絞り込まれています):
var sites = from s in DataContext.Sites
join add in DataContext.Address
on s.PrimaryAddress equals add into sa
from a in sa.DefaultIfEmpty()
select new {
s.Id,
s.SiteName,
PrimaryAddress = a
};
問題は、最終的に GridView/LinqDataSource の組み合わせに基づくコントロールが、PrimaryAddress 結合クラスで正しく並べ替えられない (無視される) ことです。このように、結合されたすべてのクラスで同じ動作が見られます。GridView がこれを処理する方法はありますか? または、式を介して動的な OrderBy のコードで処理できる方法はありますか?
追加メモ: 追加するとき.OrderBy(s => s.PrimaryAddress)
は getCannot order by type 'Address'
を、実行.OrderBy(gs => gs.PrimaryBusinessAddress.AddressLine1)
するときは get Specified method is not supported.
LinqDataSource.OrderBy 自体で並べ替えを行うと、手遅れです...現在のページのレコードのみを並べ替え、セット全体では並べ替えません。
わかりやすくするために、これはグリッド内のアドレスの形式です。
public partial class Address
{
public override string ToString()
{
return string.Format("{0} {1}{2} {3}",
AddressLine1,
City,
!string.IsNullOrEmpty(State) && State != "None" ? ", " + State : string.Empty,
!string.IsNullOrEmpty(Country) ? string.Format("({0})", Country) : string.Empty);
}
}
で並べ替えることができればAddressLine1 + City + State + Country
十分ですが、式ツリーを介してこれを行う方法がわかりません...式で指定した OrderBy に関係なく、s.SiteNameによる並べ替えに戻ります(デフォルトの並べ替えグリッド上)。グリッド コントロールに表示される、このように結合されたクラスの数は非常に限られていますが、それぞれにスイッチと Expression ケースを使用してもまったく問題はありません。解決策、またはまったく異なるアプローチについて何か考えはありますか?