Цель: получить информацию из двух разных таблиц SQL Server для отображения в ListView. Большинство из них поступают из таблицы User, а одно значение - из таблицы UserRole (в частности, из поля «Description»).
Я работал над серией ошибок. Текущее существо:
«метод skip поддерживается только для отсортированного ввода в linq для сущностей. Метод orderby должен быть вызван до того, как метод skip»
Я попытался добавить OrderBy к запросам, как упоминалось во всех сообщениях SO, но я все еще получаю сообщение об ошибке.
Вопрос: Должен ли он (OrderBy) быть где-то еще? И я иду в правильном направлении или есть лучшая реализация для объединения двух таблиц в один ListView?
ASPX:
<asp:ListView id="lstUsers" runat="server" ItemType="Project.Classes.UserWRole" DataKeyNames="ID" SelectMethod="listUsers_GetData"
OnItemCommand="lstUsers_ItemCommand" DeleteMethod="lstUsers_DeleteItem" OnSorting="lstUsers_Sorting"
OnItemDataBound="lstUsers_ItemDataBound"
ItemPlaceholderID="litPlaceHolder">
<LayoutTemplate>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>Username</th>
<th>TAX ID</th>
<th>Role</th>
</tr>
</thead>
<asp:Literal ID="litPlaceHolder" runat="server" />
</table>
</div>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%# Item.UserName %></td>
<td><%# Item.Tax_ID %></td>
<td> <%# Item.Description %></td>
</tr>
</ItemTemplate>
Default.aspx.cs:
public IQueryable<UserWithRole> listUsers_GetData()
{
IQueryable<User> users = Project.Classes.Helper.UsersForUser(
db: db,
UserID: SessionManager.CurrentUserID,
Search_User: Search_User,
aUserRoleShortcut: SessionManager.CurrentUserRole
).OrderBy(i=>i.UserRoleID);
IQueryable<UserRole> userRoles = db.UserRoles.OrderBy(i=>i.ID);
IQueryable<UserWRole> myQuery = from user in users
join userRole in userRoles on user.UserRoleID equals userRole.ID
select new UserWRole{ ID = user.ID, LastName = user.LastName, FirstName = user.FirstName, OrgName = user.OrgName, UserName = user.UserName, Description = userRole.Description, Tax_ID = user.Tax_ID, DateAdded = user.DateAdded };
if (users != null)
{
listNumSearchResults.Text = string.Format("{0} Results Found", users.Count());
if (users.Count() > 10)
{
ddlRecordsPerPage.Visible = true;
ltItemsPerPage.Visible = true;
ddlRecordsPerPage2.Visible = true;
ltItemsPerPage2.Visible = true;
dp1.Visible = true;
}
}
return myQuery;
}
UserWithRole.cs:
namespace Project.Classes
{
public class UserWRole
{
public string LastName, FirstName, OrganizationName, UserName, Description, Tax_ID;
public DateTime DateAdded;
public int ID;
}
}
helper.cs:
public static IQueryable<d.User> UsersForUser(d.ProjectPE db, int UserID, string Search_User, e.UserRoleEnum? aUserRoleShortcut)
{
IQueryable<d.User> users = null;
users = db.Users.OrderBy(a => a.LastName).AsQueryable();
if (!string.IsNullOrEmpty(Search_User))
{
users = users.Where
(a =>
a.LastName.ToLower().StartsWith(Search_User.ToLower()) ||
a.FirstName.ToLower().StartsWith(Search_User.ToLower()) ||
a.UserName.ToLower().StartsWith(Search_User.ToLower())
).AsQueryable();
}
users = users.Where(a => a.IsActive).AsQueryable();
return users;
}
Я ожидал увидеть столбец из второй таблицы для отображения в ListView, но вместо этого я получаю эти ошибки