Link to home
Start Free TrialLog in
Avatar of Stacie
StacieFlag for United States of America

asked on

MVC two joing table with link querry order by

I have this controller that return a grid but I would like to make some modification so my search result are order by location.

I have a table Master List that contain LastName, FirstName, and others fields and has one foreign key that is LocationID that is related to a Table phoneList Location and its primary key is ID.

My current controller work and return a result set:
var masterLists = db.MasterLists.Include(m => m.PhoneListLocation);

Open in new window

But when I made some modification bellow  I get an error:

     var masterLists = from r in db.MasterLists.Include(m => m.PhoneListLocation)
                              orderby r.PhoneListLocation.ID
                              select r.PhoneListLocation;
                              




            return View(masterLists.ToList());       

Open in new window


The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[PhoneListTest.Models.PhoneListLocation]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[PhoneListTest.Models.MasterList]'.
Avatar of Fernando Soto
Fernando Soto
Flag of United States of America image

Hi yguyon28;

The two queries are returning different data types. The first is returning a collection of MasterLists while the modified query that does not work returns collection of PhoneListLocation. While I do not work with Web applications I believe that the View is not expecting the PhoneListLocation data type.

What will be needed in the View?
Avatar of Stacie

ASKER

Well this controller work

var masterLists = db.MasterLists.Include(m => m.PhoneListLocation);

but I'm trying to modified it so I can have an orderby from the location in the phoneListLocation...
What is the relationship between MasterLists and PhoneListLocation? Is it a One to One, One to Many?
I think your hangup may be here:
var masterLists = (from r in db.MasterLists.Include(m => m.PhoneListLocation)
		   orderby r.PhoneListLocation.ID
		   select r.PhoneListLocation);
// Not this - return View(masterLists.ToList());
// Use this instead:
return View(masterLists);

Open in new window

masterLists should already be a 'System.Collections.Generic.IEnumerable`1[PhoneListTest.Models.MasterList]'.

-saige-
Avatar of Stacie

ASKER

But I get this error when I run the code....

Server Error in '/' Application.

The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[WebApplicationCodeFirstPhoneList.Models.PhoneListLocation]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[WebApplicationCodeFirstPhoneList.Models.MasterList]'.
Avatar of Stacie

ASKER

the relation is one to many
Is your View method doing any sort of conversion?  What does the view method take as a parameter?

-saige-
Avatar of Stacie

ASKER

No no conversion

@model IEnumerable<WebApplicationCodeFirstPhoneList.Models.MasterList>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.PhoneListLocation.Location)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.LastName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.FirstName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Department)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ExtensionInternal)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ExtensionDirectDial)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.NumberMobile)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.NumberHome)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.NumberTextMessage)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.NumberOther)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Terminated)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Shift)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Notes)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.NameGrouping)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.LastUpdatedDT)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.PhoneListLocation.Location)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Department)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ExtensionInternal)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ExtensionDirectDial)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.NumberMobile)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.NumberHome)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.NumberTextMessage)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.NumberOther)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Terminated)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Shift)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Notes)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.NameGrouping)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastUpdatedDT)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.RecordID }) |
            @Html.ActionLink("Details", "Details", new { id=item.RecordID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.RecordID })
        </td>
    </tr>
}

</table>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Fernando Soto
Fernando Soto
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial