过滤然后重新分配导航属性

时间:2012-08-17 16:36:35

标签: c# asp.net entity-framework ado.net

我正在写一个处理列表过滤的网站。用户选择一些选项,数据在服务器端过滤,并通过AJAX请求返回给用户。

对于这个例子,假设我有一张汽车制造商的表(福特,宝马,菲亚特等),并且它有一个外键可以列出他们所有车辆的清单,而这些车辆的外键还有一个车钥匙。类型。

所以它就像这样:

制造商

  • ManufacturerID
  • 名称

类型

  • TYPEID
  • 名称

车辆

  • VehicleID
  • ManufacturerID
  • TYPEID
  • 名称

这将作为一个很好的实体和一些方便的导航属性回来。然而,这是我面临的问题:假设我想根据内联的类型过滤制造商的车辆。

foreach (var manufacturer in manufacturers)
{
    manufacturer.Vehicles = manufacturer.Vehicles.Any(v => v.Type.Name == "Car"));
}

这看起来非常简单,但我收到错误:

  

无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Data.Objects.DataClasses.EntityCollection'。存在显式转换(您是否错过了演员?)

转换为EntityCollection没有帮助,并在运行时抛出异常。甚至可以将Linq查询的结果分配给导航属性吗?还有另一种方法吗?我正在使用ViewModel,但我想重新使用导航属性,如果可以的话,而不是写在字典中并手动处理它。

1 个答案:

答案 0 :(得分:0)

问题是 manufacturer.Vehicles 的类型是 EntityCollection manufacturer.Vehicles.Any 会返回 IEnumerable ,所以你想尝试如下:

foreach ( manufacturer in manufacturers) {
   manufacturer.Vehicles = (from vehicle in manufacturer.Vehicleswhere vehicle.Type.Name == "Car");
}
相关问题