0

私は C#: List にボグ標準のリストを持っています (Channel は TV チャンネルです)。チャネルは次のように定義されます。

public class Channel
{
    public int ChannelId { get; set; }
    public string ChannelName { get; set; }
}

私の ORM は、チャネル Id 順でデータベースから取得されるチャネルのリストを設定します。ChannelOrder などの新しいカスタム並べ替えプロパティに基づいてリストを並べ替える必要がありますが、基になるデータベースを変更できません。

基礎となるDBを変更せずにこれを行う方法について何か考えはありますか?

たとえば、現在データベースから来ている場合:

ChannelId =1、ChannelName = "BBC1"、ChannelId =2、ChannelName = "BBC2"、ChannelId =3、ChannelName = "ITV"

BBC2、BBC1、ITV、基本的にカスタムオーダーで注文してほしいかもしれません。

4

2 に答える 2

2

これを (クエリの一部としてではなく) インプロセスで実行したい場合は、次を使用できます。

var orderedChannelNames = new[] { "BBC2", "BBC1", "ITV", ... };
var sorted = unsorted.OrderBy(ch => orderedChannelNames.IndexOf(ch.ChannelName));

または、リスト内のすべてのチャネルが存在することがわかっている場合:

var map = unsorted.ToDictionary(ch => ch.ChannelName);
var sorted = orderedChannelNames.Select(name => map[name]);
于 2013-07-25T14:53:57.743 に答える
0

WPF の添付プロパティのような「添付」プロパティを返す別のクラスを使用することもできます。

public static class ChannelSort
{
    static Dictionary<Channel, int> _dict = new Dictionary<Channel, int>();
    public static int GetSort(this Channel c)
    {
        return _dict[c] //will throw if key's not found,
        //may want to handle it for more descriptive exception
    }
    public static int SetSort(this Channel c, int sort)
    {
        _dict[c] = sort;
    }
}

そして、これを行うことができます:

var result = unsortedList.OrderBy(c => c.GetSort());
于 2013-07-25T14:55:22.343 に答える