动态LINQ& CSLA BusinessListBase

时间:2009-03-26 22:24:12

标签: c# linq csla

我遇到的问题就是杀了我。我的一个CSLA对象(比如说是Parent)有很多孩子(让我们称之为Children - Child列表)。父级是可编辑的根(BusinessBase),子级是可编辑的子级列表(BusinessListBase),子级是可编辑的子级。

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

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

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

帮助! 乔

1 个答案:

答案 0 :(得分: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 Issue ID 326 - OrderBy should return a LinqBindingList that works with Bound Grids

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

希望有所帮助。

杰夫米勒