【问题标题】:How do I sort and filter an in-memory array of ORM objects in ColdFusion?如何在 ColdFusion 中对内存中的 ORM 对象数组进行排序和过滤?
【发布时间】:2011-09-09 19:58:17
【问题描述】:

假设我有一个 Store 实体,其中包含 Products 的集合。所以我像这样抓住我的StoreProducts

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"));

【问题讨论】:

    标签: orm coldfusion coldfusion-9 sorting array-filter


    【解决方案1】:

    我认为您需要使用 HQL 来实现这一点。我有一个question I posted some time back,它与按特定顺序取回物品有关。我最终创建了一个自定义的 getProducts 方法,而不是使用内置的 getter。该 get 方法然后运行必要的 HQL 以按要求的顺序返回记录。

    我的问题涉及中间的连接表,但应该应用相同的概念。

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

    在上述情况下,FKID 是您的 products 表中的外键列,getID 是您的 Store 对象中 PK 的默认 getter。

    我更新了答案以允许您也传递排序值:)。必须保持花哨...

    【讨论】:

      【解决方案2】:

      您还可以通过在一对多或多对多关系的父实体上声明“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 > Mapping > Define Relationship

      【讨论】:

        【解决方案3】:

        没有什么像你所希望的那样......男孩,我希望有!

        这是我能为你找到的最好的:http://cookbooks.adobe.com/post_How_to_sort_an_array_of_objects_or_entities_with_C-17958.html

        【讨论】:

        • 但是 OP 使用的是 ORM,所以你可以使用内置的 ORM 和 Hibernate 函数在返回之前对数组进行排序。直列?没有。 ORM 数组?当然! :)
        • 我想我最终要做的是为我的Products 创建一个存储库并使用它访问它。不是很喜欢用一堆方法来填充我的Store 实体来过滤Products,即使没有StoreProduct 并没有多大意义。
        猜你喜欢
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 2022-12-11
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多