1

私はそのクラスを持っています

public class jQGridModel
{
    public List<jQGridModelItem> Items { get; set; }

    public class jQGridModelItem
    {
        public DBUser UserItem { get; set; }
        public int ItemsSold { get; set; }
    }
}

およびDBUserクラス(Entity Frameworkによって生成されます)

public class DBUser 
{
    public string UserName { get; set; }
    public string UserID { get; set; }
    public string PromoCode { get; set; }
    ...
}

いくつjQGridModelかのオブジェクトがありますItemsItemsそして、これが「単純な」問題です-私はリストをasc/descに基づいてソートしたいと思いますUserName

私はもう試した

jQGridModel result = new jQGridModel();
result.Items = GetItems();

result.Items = result.Items.OrderByDescending(x => x.UserItem.UserName).ToList();

しかし、コレクションの順序は変更されていないことがわかります。私は何を間違っているのですか?

完全なコード:

        var query = (from x in db.User
                     where (...)
                     select x);

        var totalRecords = query.Count();

        jQGridModel result = new jQGridModel();

        result.Items = query.OrderBy(x => x.UserID).Skip(page * pageSize)
                            .Take(pageSize)
                            .Select(x => new jQGridModel.jQGridModelItem
                            {
                                UserItem = x,
                                ItemsSold = (from o in db.Order
                                             where
                                                 o.PromoCode.Equals(x.PromoCode)
                                             select o).Count()
                            })
                            .ToList();


  result.Items = result.Items.OrderByDescending(x => x.UserItem.UserName).ToList();
4

1 に答える 1

2

「IQueryableを返さない」と言うべきでしたが、そうではありません。したがって、取得した順序でリストを取得し、(ほとんどの場合) 遅延ロードされたプロパティで並べ替えようとしています。そのため、自分がしていると思っていることを実際に行っているわけではありません。:)

UserName を jQGridModelItem のプロパティとして配置するか、完全な DBUser エンティティが本当に必要な場合は、まずそれをロードしてから並べ替えることができます。

編集

実際には、最初の orderby で適切な順序を指定するだけです。

result.Items = query.OrderBy(x => x.UserName).Skip(page * pageSize)
                            .Take(pageSize)
                            .Select(x => new jQGridModel.jQGridModelItem
                            {
                                UserItem = x,
                                ItemsSold = (from o in db.Order
                                             where
                                                 o.PromoCode.Equals(x.PromoCode)
                                             select o).Count()
                            })
                            .ToList();
于 2012-12-03T20:33:29.717 に答える