我一直在关注Pro ASP.net MVC 2框架,我发现它非常出色。但这是一个真正的学习曲线,现在我陷入困境。Linq lambda加入错误
在本书中,您将构建如下所示的内容,以便进行分页。
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东西
室是被定义为一个域对象:
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; }
}
}
,并代表我的室的桌子上。我是否需要某种代表房间和坐标表之间联接的父实体?
的坐标实体看起来是这样的:
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 {获得;组; } public PagingInfo PagingInfo {get;组; }
}}
感谢您的看法,它似乎有所帮助,应用程序现在可以构建并运行,但当我单击搜索以进入List方法时,出现错误: 查询包含对在不同数据上下文中定义的项目的引用。错误发生在这一行 - var viewModel = new RoomsListViewModel – iKode 2011-06-06 13:54:21
我已经在上面添加了RoomsListViewModel的结构 – iKode 2011-06-06 13:56:00
这可能与我不熟悉的DB框架有关。我认为你需要以某种方式在数据上下文中注册'RoomWithCoordinates'类,但是我不能给你这个确切的指导,对不起 – Zruty 2011-06-06 14:05:55