【发布时间】:2011-03-23 12:09:33
【问题描述】:
这几天已经毁了我的生活,是时候问了...
我正在为我的应用程序使用 Entity Framework 4.0。
一个位置(如房子或办公室)有一个或多个设施(如浴室、卧室、台球桌等)
我想在位置页面上显示一个复选框列表,其中包含设施的复选框列表,其中选中了该位置当前拥有的设施。
我的设施视图模型是这样的......
public class FacilityViewItem
{
public int Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
因此,当我将位置视图模型传递给 UI 时,我想传递一个 List<T> 的设施,其中 T 的类型为 FacilityViewItem。
要获得该位置已有的设施很简单——我使用 Location.Facilities 进行查询,它返回一个 EntityCollection,其中 T 是 Facility 类型。这是因为设施是一个导航属性....
var facs = from f in location.Facilities
select new FacilityViewItem()
{
Id = f.FacilityId,
Name = f.Name,
Checked = true
};
所以这就是我的问题所在 - 我想要其余的设施,即 Location 没有的设施。
我尝试过使用 except() 和 Any() 和 Contains(),但我得到了同样的错误。
不起作用的查询示例...
var restOfFacilities = from f in ctx.Facilities
where !hasFacilities.Contains(f)
select new FacilityViewItem()
{
Id = f.FacilityId,
Name = f.Name
};
var restOfFacilities = ctx.Facilities.Except(facilitiesThatLocationHas);
var notFacs = from e in ctx.Facilities
where !hasFacilities.Any(m => m.FacilityId == e.FacilityId)
select new FacilityViewItem()
{
Id = e.FacilityId,
Name = e.Name
};
而且我在每次实现时遇到的错误......
System.NotSupportedException 未处理 消息=无法创建类型为“Chapter2ConsoleApp.Facility”的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
我在这里俯瞰什么?
【问题讨论】:
标签: linq entity-framework-4 linq-to-entities