嵌套对象属性上的C#OrderBy

时间:2020-02-21 10:46:12

标签: c# linq

我正在使用反射按对象列表排序。 我想在嵌套对象的属性上排序此列表。 这是获取列表的代码,并且对列表进行排序

List<DocumentModel> documentList;

    if (contractid == -1)
        documentList = helpsi.framework.core.CustomerProvider.DocumentModel.getAllDocumentModelListByCustomer(custid, custtypeid);
    else
        documentList = helpsi.framework.core.CustomerProvider.DocumentModel.getAllDocumentModelListGridByContract(contractid);

    if (sord.Equals("asc")) documentList = documentList.OrderBy(x => x.GetType().GetProperty(sidx.ToUpper()).GetValue(x, null)).ToList();
    else documentList = documentList.OrderByDescending(x => x.GetType().GetProperty(sidx.ToUpper()).GetValue(x, null)).ToList();

DocumentModel对象具有一个DocumentModelType属性,该属性包含DocumentStateDesc字符串属性。 我可以使用反射通过DocumentTypeDesc属性对列表进行排序吗?我可以在sidx参数中使用什么? 谢谢

这是DocumentModel类

    public class DocumentModel : ObjBase
{
    #region Attributi

    private long _id;
    private string _documentModel;
    private long? _documentModelTypeId;
    private long? _documentModelIssuingEntityId;
    private string _documentModelFilename;
    private string _documentModelPath;
    private DateTime? _documentModelStart;
    private DateTime? _documentModelEnd;
    private string _documentModelVersion;
    private long _contractId;
    private string _contractNumber;
    private long _contractTypeId;
    private long _contractStateId;
    private string _contractState;
    private long _documentModelStateId;
    private string _documentModelValoId;
    private DateTime? _documentModelUploadDate;
    private byte[] _documentModelContent;
    private long _documentModelFilter;

    private bool _flagDeleted;
    private long _userId;
    private int _orderDocumentModel = 0;

    private string _placeOfIssue;
    private string _issuingEntity;
    private DateTime? _releaseDate;
    private int? _idOpInsert;
    private int? _idOpId;

    private long? _customerId;
    private long? _customerTypeId;
    private string _customerNumber;
    private DateTime? _documentModelInvalidated;

    private bool _flagValidating;

    private string _fileRemotePath;

    private long? _folderId;
    private string _folderName;

    protected new HELPSI_Database HELPSI_Database = Common.HELPSI_Database.HELPSI_Anag;



    [XmlElement(ElementName = "CODE_DOCUMENT_MODEL_ID")]
    public long CODE_DOCUMENT_MODEL_ID
    {
        get { return _id; }
        set { _id = value; }
    }

    [XmlElement(ElementName = "DESC_DOCUMENT_MODEL")]
    public string DESC_DOCUMENT_MODEL
    {
        get { return _documentModel; }
        set { _documentModel = value; }
    }

    [XmlElement(ElementName = "CODE_DOCUMENT_MODEL_TYPE_ID")]
    public long? CODE_DOCUMENT_MODEL_TYPE_ID
    {
        get { return _documentModelTypeId; }
        set { _documentModelTypeId = value; }
    }

    [XmlElement(ElementName = "CODE_DOCUMENT_MODEL_ISSUING_ENTITY_ID")]
    public long? CODE_DOCUMENT_MODEL_ISSUING_ENTITY_ID
    {
        get { return _documentModelIssuingEntityId; }
        set { _documentModelIssuingEntityId = value; }
    }

    [XmlElement(ElementName = "DESC_DOCUMENT_MODEL_FILENAME", IsNullable = true)]
    public string DESC_DOCUMENT_MODEL_FILENAME
    {
        get { return _documentModelFilename; }
        set { _documentModelFilename = value; }
    }

    [XmlElement(ElementName = "DESC_DOCUMENT_MODEL_PATH", IsNullable=true)]
    public string DESC_DOCUMENT_MODEL_PATH
    {
        get { return _documentModelPath; }
        set { _documentModelPath = value; }
    }


    [XmlElement(ElementName = "DATE_DOCUMENT_MODEL_START")]
    public DateTime? DATE_DOCUMENT_MODEL_START
    {
        get { return _documentModelStart; }
        set { _documentModelStart = value; }
    }

    [XmlElement(ElementName = "DATE_DOCUMENT_MODEL_END")]
    public DateTime? DATE_DOCUMENT_MODEL_END
    {
        get { return _documentModelEnd; }
        set { _documentModelEnd = value; }
    }

    [XmlElement(ElementName = "DESC_DOCUMENT_MODEL_VERSION", IsNullable = true)]
    public string DESC_DOCUMENT_MODEL_VERSION
    {
        get { return _documentModelVersion; }
        set { _documentModelVersion = value; }
    }

    [XmlElement(ElementName = "CODE_CONTRACT_ID")]
    public long CODE_CONTRACT_ID
    {
        get { return _contractId; }
        set { _contractId = value; }
    }

    [XmlElement(ElementName = "FLAG_DELETED")]
    public bool FLAG_DELETED
    {
        get { return _flagDeleted; }
        set { _flagDeleted = value; }
    }

    [XmlElement(ElementName = "CODE_USER_ID")]
    public long CODE_USER_ID
    {
        get { return _userId; }
        set { _userId = value; }
    }
    [XmlElement(ElementName = "ORDER_DOCUMENT_MODEL")]
    public int ORDER_DOCUMENT_MODEL 
    {
        get { return _orderDocumentModel; } 
        set { _orderDocumentModel = value;} 
    }

    private DocumentModelType _documentModelType;
    [XmlElement(ElementName = "DocumentModelType", IsNullable = true)]
    public DocumentModelType documentModelType
    {
        get { return _documentModelType; }
        set { _documentModelType = value; }
    }

    private DocumentModelState _documentModelState;
    [XmlElement(ElementName = "DocumentModelState", IsNullable = true)]
    public DocumentModelState documentModelState
    {
        get { return _documentModelState; }
        set { _documentModelState = value; }
    }

    private DocumentModelIssuingEntity _documentModelIssuingEntity;
    [XmlElement(ElementName = "DocumentModelIssuingEntity", IsNullable = true)]
    public DocumentModelIssuingEntity documentModelIssuingEntity
    {
        get { return _documentModelIssuingEntity; }
        set { _documentModelIssuingEntity = value; }
    }

    //private DocumentModelFolder _documentModelFolder;
    //[XmlElement(ElementName = "DocumentModelFolder", IsNullable = true)]
    //public DocumentModelFolder documentModelFolder
    //{
    //    get { return _documentModelFolder; }
    //    set { _documentModelFolder = value; }
    //}

    [XmlElement(ElementName = "CODE_DOCUMENT_MODEL_STATE_ID")]
    public long CODE_DOCUMENT_MODEL_STATE_ID
    {
        get { return _documentModelStateId; }
        set { _documentModelStateId = value; }
    }

    [XmlElement(ElementName = "VALO_DOCUMENT_MODEL_ID")]
    public string VALO_DOCUMENT_MODEL_ID
    {
        get { return _documentModelValoId; }
        set { _documentModelValoId = value; }
    }

    [XmlElement(ElementName = "DATE_DOCUMENT_MODEL_UPLOAD")]
    public DateTime? DATE_DOCUMENT_MODEL_UPLOAD
    {
        get { return _documentModelUploadDate; }
        set { _documentModelUploadDate = value; }
    }

    [XmlElement(ElementName = "DESC_DOCUMENT_MODEL_CONTENT")]
    public byte[] DESC_DOCUMENT_MODEL_CONTENT
    {
        get { return _documentModelContent; }
        set { _documentModelContent = value; }
    }

    [XmlElement(ElementName = "CODE_DOCUMENT_MODEL_FILTER_ID")]
    public long CODE_DOCUMENT_MODEL_FILTER_ID
    {
        get { return _documentModelFilter; }
        set { _documentModelFilter = value; }
    }

    private long _code_siteId;
    [XmlElement(ElementName = "CODE_SITEID")]
    public long CODE_SITEID
    {
        get { return _code_siteId; }
        set { _code_siteId = value; }
    }

    [XmlElement(ElementName = "DESC_DOCUMENT_RELEASE_PLACE")]
    public string DESC_DOCUMENT_RELEASE_PLACE
    {
        get { return _placeOfIssue; }
        set { _placeOfIssue = value; }
    }

    [XmlElement(ElementName = "DESC_DOCUMENT_RELEASED_BY")]
    public string DESC_DOCUMENT_RELEASED_BY
    {
        get { return _issuingEntity; }
        set { _issuingEntity = value; }
    }

    [XmlElement(ElementName = "DATE_DOCUMENT_RELEASED")]
    public DateTime? DATE_DOCUMENT_RELEASED
    {
        get { return _releaseDate; }
        set { _releaseDate = value; }
    }

    [XmlElement(ElementName = "CODE_OP_INSERT_ID")]
    public int? CODE_OP_INSERT_ID
    {
        get { return _idOpInsert; }
        set { _idOpInsert = value; }
    }

    [XmlElement(ElementName = "CODE_OP_ID_ID")]
    public int? CODE_OP_ID_ID
    {
        get { return _idOpId; }
        set { _idOpId = value; }
    }

    [XmlElement(ElementName = "CODE_CUSTOMERID")]
    public long? CODE_CUSTOMERID
    {
        get { return _customerId; }
        set { _customerId = value; }
    }

    [XmlElement(ElementName = "CODE_CUSTOMERTYPEID")]
    public long? CODE_CUSTOMERTYPEID
    {
        get { return _customerTypeId; }
        set { _customerTypeId = value; }
    }

    [XmlElement(ElementName = "DATE_DOCUMENT_MODEL_INVALIDATED")]
    public DateTime? DATE_DOCUMENT_MODEL_INVALIDATED
    {
        get { return _documentModelInvalidated; }
        set { _documentModelInvalidated = value; }
    }

    [XmlElement(ElementName = "FLAG_VALIDATING")]
    public bool FLAG_VALIDATING
    {
        get { return _flagValidating; }
        set { _flagValidating = value; }
    }

    [XmlElement(ElementName = "CODE_CONTRACT_STATES_ID")]
    public long CODE_CONTRACT_STATES_ID
    {
        get { return _contractStateId; }
        set { _contractStateId = value; }
    }
    [XmlElement(ElementName = "DESC_CONTRACT_STATES")]
    public string DESC_CONTRACT_STATES
    {
        get { return _contractState; }
        set { _contractState = value; }
    }

    [XmlElement(ElementName = "CODE_CONTRACT_TYPE_ID")]
    public long CODE_CONTRACT_TYPE_ID
    {
        get { return _contractTypeId; }
        set { _contractTypeId = value; }
    }

    [XmlElement(ElementName = "DESC_CONTRACT_NUMBER")]
    public string DESC_CONTRACT_NUMBER
    {
        get { return _contractNumber; }
        set { _contractNumber = value; }
    }


    [XmlElement(ElementName = "DESC_CONTACT_NUMBER")]
    public string DESC_CONTACT_NUMBER
    {
        get { return _customerNumber; }
        set { _customerNumber = value; }
    }

    [XmlElement(ElementName = "CODE_DOCUMENT_MODEL_FOLDER_ID")]
    public long? CODE_DOCUMENT_MODEL_FOLDER_ID
    {
        get { return _folderId; }
        set { _folderId = value; }
    }

    [XmlElement(ElementName = "DocumentModelFolderName")]
    public string DocumentModelFolderName
    {
        get { return _folderName; }
        set { _folderName = value; }
    }

    [XmlElement(ElementName = "DESC_FILEREMOTEPATH")]
    public string DESC_FILEREMOTEPATH
    {
        get { return _fileRemotePath; }
        set { _fileRemotePath = value; }
    }
    #endregion
  }

这是DocumentModelType类

public class DocumentModelType : ObjBase
{

    #region Attributi

    private long _id;
    private string _documentModelType;

    private bool _flagDeleted;
    private long _userId;

    protected new HELPSI_Database HELPSI_Database = Common.HELPSI_Database.HELPSI_Anag;


    [XmlElement(ElementName = "CODE_DOCUMENT_MODEL_TYPE_ID")]
    public long CODE_DOCUMENT_MODEL_TYPE_ID
    {
        get { return _id; }
        set { _id = value; }
    }

    [XmlElement(ElementName = "DESC_DOCUMENT_MODEL_TYPE")]
    public string DESC_DOCUMENT_MODEL_TYPE
    {
        get { return _documentModelType; }
        set { _documentModelType = value; }
    }

    [XmlElement(ElementName = "FLAG_DELETED")]
    public bool FLAG_DELETED
    {
        get { return _flagDeleted; }
        set { _flagDeleted = value; }
    }

    [XmlElement(ElementName = "CODE_USER_ID")]
    public long CODE_USER_ID
    {
        get { return _userId; }
        set { _userId = value; }
    }


    #endregion
 }

2 个答案:

答案 0 :(得分:2)

您应该在<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>子句中使用x => x.DocumentModelType.GetType().GetProperty(sidx.ToUpper()).GetValue(x.DocumentModelType, null)。正如您提到要在此列上订购时,此处OrderBy应该是sidx

完整的代码如下所示。

DocumentStateDesc

答案 1 :(得分:1)

一个快速而肮脏的解决方法是在父类中引入属性,而该父类仅返回另一个属性的属性值。只是不给它分配XmlElement属性。如果这些类是自动生成的,则不能更改它们,但是它们可能被声明为partial,然后可以在其他类定义中添加此新属性。

public string DocumentModelType_DocumentStateDesc { get => DocumentModelType.DocumentStateDesc; }

但是,如果您想为具有多个子属性的多个属性提供通用解决方案,则需要某种路径。您可以在诸如String.Splitsidx这样的定界符上'\' '.',使用递归,然后OrderBy路径中的最后一项。

相关问题