按字符串C#Linq对包含其他对象的对象列表进行排序

时间:2018-11-13 09:09:15

标签: entity-framework linq asp.net-core-2.0 .net-standard-2.0

我想通过从Angular前端获取sort列的字符串来添加对数据进行排序的功能。这是一个简短的场景。

ObjectA的数据库模型:Entity,IAggregateRoot ObjectA 具有简单的元素,例如 Id Name ,但还具有一个额外的对象 ObjectB ObjectB 具有简单的元素,例如 Id Name ,但还具有一个额外的对象 ObjectC ,该对象仅具有简单的对象 Id 名称

ObjectA: {
    Id: Guid,
    Name: String,
    ObjectB: {
        Id: Guid,
        Name: String,
        ObjectC: {
            Id: Guid,
            Name: String,
        }
    }
}

为前端提供的模型仅使用重要元素进行了扁平化处理:

ObjectA: {
    Id: Guid,
    Name: String,
    ObjectBName: String,
    ObjectCName: String
}

现在,显示 ObjectA 的列表,我想在上面添加排序。我从前端接收元素名称(字符串)进行排序,例如 id 。这种排序很容易在后端通过Linq查询完成,例如:

return objectAList.OrderBy(x => GetPropertyToSort(x, orderByString));

使用函数 GetPropertyToSort()

private string GetPropertyToSort(object obj, string orderBy)
    {
        var prop = obj.GetType().GetProperty(char.ToUpper(orderBy[0]) + orderBy.Substring(1));
        var propValue = prop.GetValue(obj)?.ToString();
        return propValue;
    }

但是如何按另一个对象元素进行排序,例如通过仅接收扁平化的字符串值(实际上是元素 ObjectA.ObjectB.ObjectC.Name )来实现 objectCName

0 个答案:

没有答案