1

我无法为 NonPersistent 列排序。(DevExpress eXpressApp Framework (XAF) 和 eXpress Persistent Objects (XPO))这是我的代码

[Association("PCs-Gs", typeof(Allotments))]
public XPCollection<Allotments> PCs
{
    get { return GetCollection<Allotments>("PCs"); }
}

[Association("SCs-Gs", typeof(Allotments))]
public XPCollection<Allotments> SCs
{
     get { return GetCollection<Allotments>("SCs"); }
}

XPCollection<Allotments> _allAllotmentsCore;
public XPCollection<Allotments> AllAllotments
{
    get
         {
            if (_allAllotmentsCore == null)
               {
                _allAllotmentsCore = new XPCollection<Allotments>(Session);
               }
               _allAllotmentsCore.Criteria = CriteriaOperator.Parse("PCGrower.Oid == ? OR SCGrower.Oid == ?", Oid);
               _allAllotmentsCore.Sorting.Add(new SortProperty("Project.ProjectName", SortingDirection.Descending));

                PopulateCollection(_allAllotmentsCore);
                return _allAllotmentsCore;
        }
}

private void PopulateCollection(XPCollection<Allotments> sourceCollection)
{
            sourceCollection.AddRange(PCs);
            sourceCollection.AddRange(SCs);
}

现在属性

[PersistentAlias("PCs[Project is not null].Count")] // THIS IS WORKING
//[PersistentAlias("AllAllotments[PCs.Project is not null].Count")] // THIS IS NOT WORKING
 public int myCustomProperties 
    {
        get { return Convert.ToInt32(EvaluateAlias("myCustomProperties")); }
    }

如果在 NonPersistent 列上使用 PersistentAlias,那么我可以对该列进行排序。为此,我需要在 PersistentAlias 上添加逻辑。

在我的情况下:

我需要在 PersistentAlias 上添加这个逻辑,例如 [PersistentAlias('whole logic')]

逻辑

public int myCustomProperties 
    {
                get
                {
                    int _myCustomProperties  = 0;
                    Projects project = null;
                    foreach (Allotments obj in AllAllotments)
                    {
                        if (project != obj.Project && obj.Project != null)
                        {
                            project = obj.Project;
                            _myCustomProperties += 1;
                        }
                    }
                    return _myCustomProperties  ;
                }
    }

让我们专注于逻辑

我使用了 AllAllotments(这不是关联属性)。

如果我使用 [PersistentAlias('use AllAllotments')] 之类的方法,则会出现错误。

但我像 [PersistentAlias("use PCs")] 使用然后工作。

唯一不同的是:PCs(Association 属性)和 AllAllotments(不是 Association)。

所以,我的问题:

如何在 PersistentAlias 上使用 AllAllotments ?

有人知道吗?

4

1 回答 1

1

您可以使用免费加入。来自 DevExpress 文档。

借助 XPO,您可以使用自由联接基于不直接相关(没有明确定义的关联)的持久对象构建标准。从本质上讲,XPO 允许您根据条件连接任何持久对象,使用其属性针对匹配对象计算聚合函数,并返回聚合值作为连接的结果。为此,请在您的条件中使用 JoinOperands。

您可以在标准中使用它们,例如,

CriteriaOperator criteria = 
CriteriaOperator.Parse("[<Orders>][^.EmployeeID = EmployeeID].Count() > 50");
XPCollection<Employee> employees = new XPCollection<Employee>(session, criteria);

或者您可以在[PersistentAlias]. 从 DevExpress 支持中心查看此项目。

public class Department : BaseObject 
{
     private System.Int32? _TotalPhoneNumbers;
     [PersistentAlias("[<PhoneNumber>][Party.<Contact>Department.Oid = ^.Oid and PhoneType='1'].Count()")]
     public System.Int32? TotalPhoneNumbers {
        get {
            if (_TotalPhoneNumbers == null) {
                _TotalPhoneNumbers = (int?)EvaluateAlias("TotalPhoneNumbers");
            }
            return _TotalPhoneNumbers;
        }
    }
}

对于 DevExpress 的所有事情,最好的地方是他们的支持中心

于 2016-09-06T15:58:58.977 回答