None
None

Reputation: 5670

Filter objects inside model class by date

I have a model object called EventListingResponse like this

public class EventListingResponse
{
    public List<events> result { get; set; }
    public int totalResults { get; set; }
}
 public class events
{
    public string id { get; set; }
    public string name { get; set; }
    public string startDate { get; set; } //smaple date 2014-03-31T12:30:03
}

And I am storing data in this object like this

EventListingResponse eventListResponse = rGetAllEventList();//data from another function.

Now I want to filter this list so that I can get a list of events like , -->events from January -->Events from February etc. Can any one point out a good method to accomplish this?

Upvotes: 0

Views: 171

Answers (3)

Tarun
Tarun

Reputation: 166

define string array of months u wanted to be filtered with

string[] monthresult = { "January", "March" }; 

using Linq

 var filteredresults = eventListResponse.result.Where(o => monthresult.Contains(Convert.ToDateTime(o.startDate).ToString("MMMM")));

filteredresults will content list of events with month January and March

Upvotes: 1

Adam Zuckerman
Adam Zuckerman

Reputation: 1641

You can use a LINQ query to filter your list:

var filtered = from item in eventListResponse.result
               where DateTime.Parse(item.startDate) >= DateTime.Parse("your starting date")
               and DateTime.Parse(item.startDate) <= DateTime.Parse("your ending date")
               select item;

You also need to change your assignment of the data from rGetAllEventList() to go into eventListResponse.result.

Upvotes: 1

matthes
matthes

Reputation: 102

You could try this:

            EventListingResponse evl = new EventListingResponse();
        evl.result = new List<events>();
        evl.result.Add(new events() { id = "1", name = "test1", startDate = "2014-03-31T12:30:03" });
        evl.result.Add(new events() { id = "2", name = "test2", startDate = "2014-03-31T14:30:03" });
        evl.result.Add(new events() { id = "3", name = "test3", startDate = "2014-05-31T16:30:03" });
        evl.result.Add(new events() { id = "4", name = "test4", startDate = "2014-05-31T12:30:03" });

        var dated_EventListResponse = evl.result.Select(t => new { date = DateTime.Parse(t.startDate), MyEvent = t });

        var grouped_EventListResponse = dated_EventListResponse.GroupBy(g => g.date.Month);

        foreach (var group in grouped_EventListResponse)
        {
            Console.WriteLine("Filter: " + group.Key);
            foreach (var grouped_event in group)
            {
                Console.WriteLine("\t" + grouped_event.MyEvent.name);
            }
        }

Upvotes: -1

Related Questions