0

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

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

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

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

帮助!乔

4

1 回答 1

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 LINQ 的东西。从其他地方的其他讨论和跟进中,我看到您还指出了为 CSLA 记录的错误/问题。这是链接:

CSLA 问题 ID 326 - OrderBy 应返回与绑定网格一起使用的 LinqBindingList

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

希望有帮助。

杰夫·米勒

于 2009-03-27T14:05:44.460 回答