Bal*_*ldy 10 linq linq-to-entities entity-framework-4
这已经毁了我几天的生命,有时间问...
我正在为我的应用程序使用Entity Framework 4.0.
位置(如房屋或办公室)有一个或多个设施(如浴室,卧室,斯诺克台等).
我想在位置页面上显示一个复选框列表,其中包含设施的复选框列表,并检查该位置当前具有的列表.
我的设施模型就像这样......
public class FacilityViewItem
{
public int Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
因此,当我将位置视图模型传递给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
};
Run Code Online (Sandbox Code Playgroud)
所以这就是我的问题所在 - 我想要其他设施,那些位置没有.
我尝试过使用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
};
Run Code Online (Sandbox Code Playgroud)
每次实施都会产生错误......
System.NotSupportedException未处理Message =无法创建类型为"Chapter2ConsoleApp.Facility"的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').
我在这里俯瞰什么?
Bal*_*ldy 19
具有讽刺意味的是,经过几天的痛苦之后,我在这里发布了这个问题之后的几个小时就解决了它.
该错误基本上是说'我不知道如何通过比较强类型对象来计算哪些项不包括在内.给我一个Ints或一些简单类型的列表,我可以照顾它.
所以,首先你需要获得一个主键列表,然后在contains子句中使用它...
//get the primary key ids...
var hasFacilityIds = from f in hasFacilities
select f.FacilityId;
//now use them in the contains clause...
var restOfFacilities = from f in ctx.Facilities
where !hasFacilityIds.Contains(f.FacilityId)
select new FacilityViewItem()
{
Id = f.FacilityId,
Name = f.Name
};
Run Code Online (Sandbox Code Playgroud)
第一个查询似乎很好,但你需要比较Ids:
var restOfFacilities = from f in ctx.Facilities
where !facs.Select(fac => fac.Id).Contains(f.Id)
select f;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22388 次 |
| 最近记录: |