【发布时间】:2011-09-09 04:39:06
【问题描述】:
我一直在关注 Pro ASP.net MVC 2 Framework 这本书,我发现它非常出色。但这是一个真正的学习曲线,现在我被卡住了。
在本书中,您构建了如下所示的内容,它允许分页。
public ViewResult List([DefaultValue(0)] string cityzip, [DefaultValue(1)] int page)
{
var roomsToShow = roomsRepository.Rooms.Where(x => x.CountryID == cityzip);
var viewModel = new RoomsListViewModel
{
Rooms = roomsToShow.Skip((page - 1) * PageSize).Take(PageSize).ToList(),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = roomsToShow.Count()
}
};
return View(viewModel); // Passed to view as ViewData.Model (or simply Model)
}
我认为需要对此进行调整,以便我可以加入搜索
public ViewResult List([DefaultValue(0)] string cityzip, [DefaultValue(1)] int page)
{
var roomsToShow = roomsRepository.Rooms.Join(
roomCoordinatesRepository.RoomCoordinates,
room => room.RoomID,
roomCoordinate => roomCoordinate.RoomID,
(room, roomCoordinate) => new { RoomCoordinate = roomCoordinate, Room = room });
var viewModel = new RoomsListViewModel
{
Rooms = roomsToShow.Skip((page - 1) * PageSize).Take(PageSize).ToList(),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = roomsToShow.Count()
}
};
return View(viewModel); // Passed to view as ViewData.Model (or simply Model)
}
...但是我立即收到一个智能感知错误说-
无法将类型 'System.Collections.Generic.List<AnonymousType#1>' 隐式转换为 'System.Collections.Generic.IList<MeetingRoom.Domain.Entities.Room>'。存在显式转换(您是否缺少演员表?)
我显然对代码理解得不够透彻,无法找出问题所在。我也对这个 lamda linq 的东西感到有点不知所措
Room 是一个域对象,定义为:
namespace MeetingRoom.Domain.Entities
{
[Table(Name = "Rooms")]
public class Room
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public int RoomID { get; set; }
[Column] public string Name { get; set; }
[Column] public string Description { get; set; }
[Column] public decimal Price { get; set; }
[Column] public string Category { get; set; }
[Column] public string Pcode { get; set; }
[Column] public int CountryID { get; set; }
public MeetingRooms.Domain.entities.RoomCoordinate RoomCoordinate { get; set; }
}
}
并代表我的 Room 表。我是否需要某种父实体来表示 Room 和 Room-co-ordinates 表之间的连接?
坐标实体如下所示:
namespace MeetingRooms.Domain.entities
{
[Table(Name = "RoomCoordinate")]
public class RoomCoordinate
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert, Name = "ID")]
public int CoordID { get; set; }
[Column]
public int RoomID { get; set; }
[Column]
public string Coordinates { get; set; }
[Column]
public decimal Latitude { get; set; }
[Column]
public decimal Longitude { get; set; }
}
}
RoomsListViewModel 如下所示:
命名空间 MeetingRoomsMVC.WebUI.Models
{
公共类RoomsListViewModel
{
公共 IList RoomsWithCoordinates { 得到;放; }
公共 PagingInfo PagingInfo { 获取;放; }
}
}
【问题讨论】:
标签: c# lambda linq-to-entities