【问题标题】:Dynamic LINQ & CSLA BusinessListBase动态 LINQ 和 CSLA BusinessListBase
【发布时间】:2009-03-26 22:24:12
【问题描述】:

我遇到了一个让我快要死的问题。我的一个 CSLA 对象(假设是 Parent)有很多孩子(我们称他们为 Children - Child 的列表)。 Parent 是可编辑的根 (BusinessBase),Child 是可编辑的子列表 (BusinessListBase),Child 是可编辑的子。

我想做的是这样做: 父 x = Parent.GetParent(id); IQueryable y = Parent.MyChildren.OrderBy("Age DESC");

理论上,y 应该填充一组按年龄降序排列的孩子(假设“Age”是 Child 对象的属性)。

但是,我得到的是 y.Count() = 0。虽然如果我执行 Parent.MyChildren.Count() 则没有 0。这是动态 LINQ 或 CSLA 中的错误吗?这(错误)不会发生在我的只读列表中。

帮助! 乔

【问题讨论】:

    标签: c# linq csla


    【解决方案1】:

    乔,

    这里有一个可能会有所帮助的线索。你对可编辑列表和只读列表之间区别的评论让我很好奇,所以我挖得更深了。

    根据我对 CSLA 3.5 代码的深入了解,BusinessListBase 实现了 IQueryable(实际上它是 CSLA 代码中的“C”,如“Child”)。 ReadOnlyListBase 类没有。

    这可能会影响正在调用哪个 Dynamic LINQ OrderBy 扩展方法(有两种),而用于 IQueryable 的方法只是为常规 IQueryable 调用 OrderBy 的版本。

    另一方面,如果您在 BusinessListBase 中跟踪 IQueryable,则 Provider 属性(IQueryProvider 类型)委托给 CslaQueryProvider。

    public IQueryProvider Provider
    {
      get {
        return new Linq.CslaQueryProvider<T, C>(this);
      }
    }
    

    综上所述,在我不得不花费的时间有限的情况下,我认为进一步深入研究(使用调试器,呵呵!)可能是有必要的。从其他地方的其他讨论和跟进中,我看到您还指出了为 CSLA 记录的错误/问题。这是链接:

    CSLA Issue ID 326 - OrderBy should return a LinqBindingList that works with Bound Grids

    我的怀疑是它与 BusinessListBase 的 IQueryable 实现的关系比其他任何东西都多。而且,它看起来不像 ReadOnlyListBase 直接或通过继承(在我的 CSLA 3.5 副本中)实现 IQueryable。

    希望对您有所帮助。

    杰夫·米勒

    【讨论】:

    • 是的,这似乎是 CSLA 的 IQueryable 实现的一个错误。我将跟踪问题并尝试与 3.6 版本进行代码比较。我也在使用 3.5 版本的 CSLA。
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2011-08-18
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多