Search code examples
c#apidatatabledate-arithmeticdate-comparison

Show only result within 90 days from present date after API grabs the data


I have my code pasted below. Now I'm totally lost on where and what code to insert let's say I want to show only data which has a startdate within (date today - 90 days). Kindly help me please. Been stuck for weeks on this one.

By the way this code will run after it grabs the data from another program through API.

public DataTable FGetHasData(int iMode)
    {
        DataTable dtHASDataReturn = new DataTable();
        DataTable dtHASData = new DataTable();
        string sSorter = String.Empty;

        if (iMode.Equals(0))
        {
            try
            {
                dtHASData = this.oHASData.RetrievePayments();


                dtHASData.Columns[0].ColumnName = "Agency Code";
                dtHASData.Columns[1].ColumnName = "Agency Name";
                dtHASData.Columns[2].ColumnName = "Patient Code";
                dtHASData.Columns[3].ColumnName = "Claim Code";
                dtHASData.Columns[5].ColumnName = "Insurance Company Name";
                dtHASData.Columns[6].ColumnName = "Amount";
                dtHASData.Columns[7].ColumnName = "Document Number";
                dtHASData.Columns[8].ColumnName = "To Print";
                dtHASData.Columns[9].ColumnName = "Payment Type";
                dtHASData.Columns[10].ColumnName = "Memo";
                dtHASData.Columns[11].ColumnName = "Balance Type";
                dtHASData.Columns[12].ColumnName = "RAP";
                dtHASData.Columns[13].ColumnName = "Outlier";

                sSorter = "periodstart";
            }                
            catch (Exception e)
            {
                this.FLogTrans(e.Message.ToString());
                return dtHASDataReturn;
            }

        }
        else if (iMode.Equals(1))
        {
            try
            {
                dtHASData = this.oHASData.RetrieveRemittanceAdvices();

                dtHASData.Columns[0].ColumnName = "Agency Code";
                dtHASData.Columns[1].ColumnName = "Agency Name";
                dtHASData.Columns[3].ColumnName = "Check Amount";
                dtHASData.Columns[4].ColumnName = "Remittance Advice Memo";
                dtHASData.Columns[5].ColumnName = "Insurance Company Name";
                dtHASData.Columns[6].ColumnName = "Amount Paid";
                dtHASData.Columns[7].ColumnName = "Net Reimbursement";
                dtHASData.Columns[8].ColumnName = "Withheld";
                dtHASData.Columns[9].ColumnName = "Document Number";
                dtHASData.Columns[10].ColumnName = "To Print";
                dtHASData.Columns[11].ColumnName = "Payment Type";
                dtHASData.Columns[12].ColumnName = "Memo";

                sSorter = "RADate";
            }
            catch (Exception e)
            {
                this.FLogTrans(e.Message.ToString());
                return dtHASDataReturn;
            }
        }

        DataView dvSorter = new DataView(dtHASData);

        if (this.FConfigVarRetriever(4).Equals("1"))
        {
            int iRowsMany = int.Parse(this.FConfigVarRetriever(5));

            dvSorter.Sort = sSorter + " desc";
            dtHASData = dvSorter.ToTable();

            if (iMode.Equals(0))
            {
                dtHASData.Columns[4].ColumnName = "Period Start";
            }
            else if (iMode.Equals(1))
            {
                dtHASData.Columns[2].ColumnName = "Remittance Advice Date";
            }

            dtHASDataReturn = dtHASData.AsEnumerable().Take(iRowsMany).CopyToDataTable();                
        }
        else if (this.FConfigVarRetriever(4).Equals("2"))
        {
            dvSorter.RowFilter = sSorter + " >= '" + this.FConfigVarRetriever(6) + "'";
            dvSorter.Sort = sSorter + " desc";
            dtHASData = dvSorter.ToTable();

            if (iMode.Equals(0))
            {
                dtHASData.Columns[4].ColumnName = "Period Start";
            }
            else if (iMode.Equals(1))
            {
                dtHASData.Columns[2].ColumnName = "Remittance Advice Date";
            }

            dtHASDataReturn = dtHASData;
        }


        return dtHASDataReturn;
    }

Solution

  • You said it comes in as an IEnumerable, and I'm going to assume the class has the following structure:

    public class Record
    {
        DateTime StartDate {get; set;}
        //A whole bunch of other stuff
    }
    

    In that case, we will use a Where query to do our filtering, combined with some DateTime math and comparison:

    IEnumerable<Record> results = original.Where(r => r.StartDate >= DateTime.Now.AddDays(-90));
    

    You would then use "results" wherever you had "original" so you only act on the filtered data.

    To respond to the comments:

    You can put it wherever you want the filtering to take place. I would put it immediately before you actually try to use it:

    dtHASData = dtHASData.Where(....);  //Add here
    DataView dvSorter = new DataView(dtHASData);
    

    Its ok that it comes in as an array, those are IEnumerable so the LINQ extensions work on them.