使用 QueryExpression 按数字按字符串排序

Order by a string by numbers with QueryExpression

我在订购在 CRM 中保存为字符串的号码时遇到问题,

它在 10 之前工作正常,然后它说 9 > 10 我知道一个简单的解决方案,我可以在其中将零附加到字符串以达到固定长度。 想知道是否有办法以某种方式按 int 按字符串排序。

我的代码:

       QueryExpression query = new QueryExpression(entity);
       query.ColumnSet.AddColumn(ID);
       query.AddOrder(ID, OrderType.Descending); //there is a problem because the type is string.
       EntityCollection entityCollection = organizationService.RetrieveMultiple(query);

我认为没有任何简单的方法可以实现这一目标。我在 post 代码中遇到了同样的问题,最终存储了两个值,即字符串和整数。在查询时我使用 int 字段对其进行排序。

希望这对您有所帮助, 拉维卡夏普

此问题的另一种可能解决方案是使用 LINQ 的 OrderBy() 方法而不是使用 QueryExpression 的内置排序方法对查询结果进行排序。

EntityCollection results = _client.RetrieveMultiple(query);

var sortedResults = results.Entities.OrderBy((e) => 
                    int.Parse(e.GetAttributeValue<string>("nameofattribute"))
                    );

这将产生您想要的结果。这不是一个理想的解决方案,但至少您不必将所有内容都存储两次。