Master
Master

Reputation: 2153

Short Date in Linq

I want my query to stop displaying time and just the date. This is what I've tried to far:

Query= (from z in ctx.Interactions 
        where z.ActivityDate <= StartDateTo
           && z.ActivityDate >= EndDateTo
           && z.Indepth == false
        select new
               {
                   Date = new DateTime(z.ActivityDate.Year, z.ActivityDate.Month, z.ActivityDate.Day),
                   Subject = z.Subject
               }).ToList();

And

Query= (from z in ctx.Interactions
        where z.ActivityDate <= StartDateTo
           && z.ActivityDate >= EndDateTo
           && z.Indepth == false
        select new
               {
                   Date = z.ActivityDate.Date,
                   Subject = z.Subject
               }).ToList();

And both didn't work.

LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression. when trying to apply a string method.

Upvotes: 3

Views: 8694

Answers (5)

Mukesh Salaria
Mukesh Salaria

Reputation: 4243

convert date into string like below

string stringDate=string.empty;
stringDate=Convert.ToDateTime("2014-04-23 00:00:00").ToShortDateString();

it will give output like 2014-04-23

Upvotes: -1

Jaihind
Jaihind

Reputation: 2778

ToShortDateString() may help you.

Query= (from z in ctx.Interactions
        where z.ActivityDate <= StartDateTo
           && z.ActivityDate >= EndDateTo
           && z.Indepth == false
        select new
               {
                   Date = z.ActivityDate.ToShortDateString(),
                   Subject = z.Subject
               }).ToList();

Upvotes: 1

Evan L
Evan L

Reputation: 3855

You would need to perform the formatting at the time of the binding. As you don't show the actual binding code, it is hard to specifically address your situation but lets look at what happens in your query:

Query= (from z in ctx.Interactions
        where z.ActivityDate <= StartDateTo && z.ActivityDate >= EndDateTo && z.Indepth == false
        select new { Date = z.ActivityDate.Date, Subject = z.Subject }).ToList();

Once LINQ handles this query, the resulting Query variable should be of type List<DateTime>. The way you have the query working you would return a list of DateTimes in a format like this:

2014-04-23 00:00:00
2014-03-28 00:00:00
etc...

In order to bind this without the time value, you need to call ToString() on each element (or the desired element) of the list at the time of binding.

Assuming you are using a ListBox or something similar you could write the following:

foreach (var date in myList) //this is the resultant list from the query
{
    listBox1.Items.Add(date.ToString("MM/dd/yyyy");
}

If you are literally binding to a DataSource property, you will need to convert your List<DateTime> to a List<string> with the formatted values.

Upvotes: 1

Amir Popovich
Amir Popovich

Reputation: 29836

Your queries return objects with Date & Subject properties.

In the Date property you are passing a DateTime object. In order to display the short date you have a "ToShortDateString()" function on a date.

If you dont want to work with a date and prefer selecting a string, then do the conversion inside the linq query.

Use this if you want to return strings:

var q = (from z in ctx.Interactions
        where z.ActivityDate <= StartDateTo && z.ActivityDate >= EndDateTo && z.Indepth == false
        select new { Date = z.ActivityDate.Date.ToShortDateString(), Subject = z.Subject }).ToList();

Upvotes: 2

Manish Basantani
Manish Basantani

Reputation: 17509

You can use anyDate.ToString("ddMMyyyy");//any preferred format.

Not sure if that is what you are looking for!

Upvotes: 3

Related Questions