athira k

athira k

  • NA
  • 140
  • 53.8k

group mobno and take last entries from db on datetime mvc

May 23 2017 1:49 PM

I am doing a project and got confused in a session that to retrieve phone number from db and must visible only the latest phone number based on date time. That is I have two field in db called phonenumber and datetime. I have got a many repeated phone number in different datetime. so what I need is to show phone number only twice than many with condition that only the most latest date is used (don't want to show the first entered number in db). I have written code for group by but it is not working and I didn't get the correct code for my problem

controller
 
 
public async Task<ActionResult> Index(string sortOrder, string CurrentSort, string currentFilter, string searchString, int? page, string FromDateString, string ToDateString)
 { 
ViewData["FromDateString"] = FromDateString;
 ViewData["ToDateString"] = ToDateString; 
int pageSize = 10; int pageIndex = 1;   
pageIndex = page.HasValue ? Convert.ToInt32(page) : 1;
 ViewBag.CurrentSort = sortOrder; 
sortOrder = String.IsNullOrEmpty(sortOrder) ? "DateTime" : sortOrder;
 IPagedList<Phone> phones = null;
 var List = db.Phones.OrderBy(t=>t.DateTime).ToList(); 
foreach(var group in List.GroupBy(item => item.phoneNo))
 { 
List = group.ToList();
} 
if (!String.IsNullOrEmpty(searchString))
 { 
List = List.Where(s => s.phoneNo.ToString().Contains(searchString)).ToList(); 
} 
switch (sortOrder) 
{ 
case "DateTime": if (sortOrder.Equals(CurrentSort))        
phones = List.OrderByDescending(m => m.DateTime).ToPagedList(pageIndex, pageSize); else   
 phones = List.OrderBy(m => m.DateTime).ToPagedList(pageIndex, pageSize); 
break;
 case "Default":                
 phones = List.OrderBy(m => m.DateTime).ToPagedList(pageIndex, pageSize);
 break; 
}
 return View(phones); 
}
  view page
 
 
<table class="table">
 <tr>
 <th>                 
phoneNo            
 </th> 
<th> DateTime </th>
 <th></th> 
</tr>
 @foreach (var item in Model) 
{ 
<tr> <td> @Html.DisplayFor(modelItem => item.phoneNo) </td> <td>
 @Html.DisplayFor(modelItem => item.DateTime) </td> <td> 
@Html.ActionLink("Details", "Details", new { id = item.Id })
 </td> </tr>
 } 
<tr> 
<td colspan="6"> <br /> 
<div style="text-align:left;"> Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)   of @Model.PageCount @Html.PagedListPager(Model, page => Url.Action("Index", new { page, currentFilter = ViewBag.CurrentFilter, sortOrder = ViewBag.sortOrder, ViewBag.FromDateString, ViewBag.ToDateString, ViewBag.searchString })) 
</div> </td> 
<td> <br /> 
</td> </tr> 
</table>
 

this is the view page after going this it shows the actual means all the items from db and is not taking as group by

can anyone please help me to find the solution ???