0

"Brand Products"私は現在、データベースから取得した後にそれらに基づいてアルファベット順に並べ替えようとしている配列を持っていnameます。現在、リストはこれを使用して入力されています:

    protected override object[] GetCollection()
    {
        Brand brand = ItemLocator.LocateItem(this.Parent, typeof(Brand)) as Brand;

        ICriteria criteria = CoreHttpModule.Session.CreateCriteria(typeof(Product));
        criteria.Add(NHibernate.Expression.Expression.Eq("Brand", brand));
        criteria.Add(NHibernate.Expression.Expression.Eq("IsVisibleOnWebsite", true));

        IList<Product> productList = criteria.List<Product>();

        IList<Product> filteredLroductList = new List<Product>();

        for (int i = 0; i < productList.Count; i++)
        {
            if (productList[i].Parent != null)
            {
                filteredLroductList.Add(productList[i]);
            }
        }

        object[] filteredProductListArray = new object[filteredLroductList.Count];

        for (int i = 0; i < filteredLroductList.Count; i++)
        {
            filteredProductListArray.SetValue(filteredLroductList[i], i);
        }

             return filteredProductListArray;
    }
4

5 に答える 5

2

単一の linq 式で実現できます。

products[] productList = criteria.List<Product>()
                                  .Where(p => p.Parent != null)
                                  .OrderBy((p => p.Name)
                                  .ToArray();

完全なコード。

protected override object[] GetCollection()
{
    Brand brand = ItemLocator.LocateItem(this.Parent, typeof(Brand)) as Brand;

    ICriteria criteria = CoreHttpModule.Session.CreateCriteria(typeof(Product));
    criteria.Add(NHibernate.Expression.Expression.Eq("Brand", brand));
    criteria.Add(NHibernate.Expression.Expression.Eq("IsVisibleOnWebsite", true));

    products[] productList = criteria.List<Product>()
                                         .Where(p => p.Parent != null)
                                         .OrderBy((p => p.Name)
                                         .ToArray();
    return productList;
}
于 2012-10-19T11:08:24.060 に答える
0

メソッドの後半をのように置き換えるだけです。

return filteredProductList.OrderBy(f => f.BrandName).ToArray();

BrandNameそれがあなたが注文したいものであると仮定して

于 2012-10-19T11:04:23.653 に答える
0

これを試して:

protected override object[] GetCollection()
{
    Brand brand = ItemLocator.LocateItem(this.Parent, typeof(Brand)) as Brand;

    ICriteria criteria = CoreHttpModule.Session.CreateCriteria(typeof(Product));
    criteria.Add(NHibernate.Expression.Expression.Eq("Brand", brand));
    criteria.Add(NHibernate.Expression.Expression.Eq("IsVisibleOnWebsite", true));

    return criteria.List<Product>()
        .Where(x => x.Parent != null)
        .OrderBy(x => x.Name)
        .Cast<object>()
        .ToArray();
}
于 2012-10-19T11:05:14.890 に答える
0

あなたのタイプに応じて、おおよそ次のようなものです:

var products = from p in GetCollection() orderby p.ProductName select p;

于 2012-10-19T11:06:03.153 に答える
0

リストとして保持すると、コレクションに対してlinqを使用できます...

mylist = myList.OrderBy(x => x.Name).ToList();

于 2012-10-19T11:07:32.950 に答える