Как отсортировать и отфильтровать массив ORM в памяти в ColdFusion? - PullRequest
3 голосов
/ 09 сентября 2011

Допустим, у меня есть Store сущность, которая содержит коллекцию Products. Поэтому я беру свои Store и Products вот так:

var store = entityLoadByPK("Store", 13);
var products = store.getProducts();

Теперь я бы хотел отсортировать и отфильтровать Products, который на данный момент является коллекцией в памяти (предположим, что прокси были разрешены). Возможно ли это в ColdFusion, и если да, то как бы я это сделал?

Примечание : Я в основном ищу что-то похожее на функции C # LINQ, где я могу сделать:

var store = session.Query<Store>().Single(x => x.Id == 13);
var products = store.GetProducts();
var sortedProducts = products.OrderBy(x => x.Name).ToList();
var filteredProducts = products.Where(x => x.Name.Contains("Shampoo"));

Ответы [ 3 ]

4 голосов
/ 10 сентября 2011

Я думаю, вам нужно использовать HQL, чтобы это произошло.У меня есть вопрос, который я отправил некоторое время назад , который был связан с получением предметов в определенном порядке.В итоге я создал собственный метод getProducts вместо использования встроенного геттера.Затем этот метод get запустил необходимый HQL, чтобы вернуть записи в требуемом порядке.

Мой вопрос касается таблицы соединений в середине, но должны применяться те же понятия.

public Products[] function getProducts(string SortColumn = "Name"){
    return EntityLoad("Products", {FKID = getID()}, Arguments.SortColumn & " ASC")
}

ВВ приведенном выше случае FKID - это столбец внешнего ключа в таблице ваших продуктов, а getID - это метод получения по умолчанию для PK в вашем объекте Store.

Я обновил ответ, чтобы вы также могли передать значение сортировки:).Должен держать это в моде ...

2 голосов
/ 10 сентября 2011

Вы также можете указать поведение сравнения и сортировки по умолчанию для реляционной коллекции, объявив атрибуты свойств where и orderBy в родительской сущности отношения «один ко многим» или «многие ко многим». Ниже приведен сокращенный пример, за которым следует ссылка на сопроводительную документацию.

Parent.cfc

component persistent="true"
{
     property cfc="Child" fieldType="one-to-many" name="Children" where="Age >= 18" orderBy="Name ASC, Age DESC"
}

Child.cfc

component persistent="true"
{
     property cfc="Parent" fieldType="many-to-one" name="Parent"
}

Ссылка

Adobe ColdFusion 9> ORM> Отображение> Определить взаимосвязь

0 голосов
/ 10 сентября 2011

Нет ничего похожего на то, на что вы надеетесь ... Мальчик, я бы хотел, чтобы это было!

Вот лучшее, что я могу найти для тебя: http://cookbooks.adobe.com/post_How_to_sort_an_array_of_objects_or_entities_with_C-17958.html

...