我遇到的问题就是杀了我。我的一个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列表中。
帮助! 乔
答案 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。
希望有所帮助。
杰夫米勒