Extracting the Date from a DateTime in Entity Framework 4 and LINQ
Posted
by Ken Cox [MVP]
on ASP.net Weblogs
See other posts from ASP.net Weblogs
or by Ken Cox [MVP]
Published on Tue, 15 Mar 2011 00:28:00 GMT
Indexed on
2011/03/15
8:10 UTC
Read the original article
Hit count: 660
.NET
|.NET 4.0
|ASP.NET
|ASP.NET 4
|Community News
|Entity Framework
|General Software Developm
|radgrid
|telerik
|Visual Studio 2010
In my current ASP.NET 4 project, I’m displaying dates in a GridDateTimeColumn of Telerik’s ASP.NET Radgrid control. I don’t care about the time stuff, so my DataFormatString shows only the date bits:
<telerik:GridDateTimeColumn FilterControlWidth="100px"
DataField="DateCreated" HeaderText="Created"
SortExpression="DateCreated" ReadOnly="True"
UniqueName="DateCreated" PickerType="DatePicker"
DataFormatString="{0:dd MMM yy}">
My problem was that I couldn’t get the built-in column filtering (it uses Telerik’s DatePicker control) to behave. The DatePicker assumes that the time is 00:00:00 but the data would have times like 09:22:21. So, when you select a date and apply the EqualTo filter, you get no results. You would get results if all the time portions were 00:00:00.
In essence, I wanted my Entity Framework query to give the DatePicker what it wanted… a Date without the Time portion. Fortunately, EF4 provides the TruncateTime function. After you include
Imports System.Data.Objects.EntityFunctions
You’ll find that your EF queries will accept the TruncateTime function. Here’s my routine:
Protected Sub RadGrid1_NeedDataSource _
(ByVal source As Object, _
ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) _
Handles RadGrid1.NeedDataSource
Dim ent As New OfficeBookDBEntities1
Dim TopBOMs = From t In ent.TopBom, i In ent.Items _
Where t.BusActivityID = busActivityID _
And i.BusActivityID And t.ItemID = i.RecordID _
Order By t.DateUpdated Descending _
Select New With {.TopBomID = t.TopBomID, .ItemID = t.ItemID, _
.PartNumber = i.PartNumber, _
.Description = i.Description, .Notes = t.Notes, _
.DateCreated = TruncateTime(t.DateCreated), _
.DateUpdated = TruncateTime(t.DateUpdated)}
RadGrid1.DataSource = TopBOMs
End Sub
Now when I select March 14, 2011 on the DatePicker, the filter doesn’t stumble on time values that don’t make sense.
Full Disclosure: Telerik gives me (and other developer MVPs) free copies of their suite.
© ASP.net Weblogs or respective owner