C# 筛选然后重新指定导航属性
我正在写一篇关于列表过滤的文章。用户选择一些选项,然后在服务器端过滤数据,并通过AJAX请求将其设置回用户 对于这个例子,假设我有一个汽车制造商表(福特、宝马、菲亚特等),它有一个外键,指向他们所有车辆的列表,这反过来又有一个外键指向车辆类型表 所以是这样的: 制造商C# 筛选然后重新指定导航属性,c#,asp.net,entity-framework,ado.net,C#,Asp.net,Entity Framework,Ado.net,我正在写一篇关于列表过滤的文章。用户选择一些选项,然后在服务器端过滤数据,并通过AJAX请求将其设置回用户 对于这个例子,假设我有一个汽车制造商表(福特、宝马、菲亚特等),它有一个外键,指向他们所有车辆的列表,这反过来又有一个外键指向车辆类型表 所以是这样的: 制造商 制造厂 名字 类型 类型ID 名字 车辆 车辆ID 制造厂 类型ID 名字 这将作为一个不错的实体和一些方便的导航属性返回。然而,这正是我面临的问题:假设我想根据制造商的车型对其进行在线过滤 foreach (var
- 制造厂
- 名字
- 类型ID
- 名字
- 车辆ID
- 制造厂
- 类型ID
- 名字
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,但如果可以的话,我想重新使用导航属性,而不是,在字典中编写并手动处理。问题在于制造商.Vehicles的类型是实体集合和制造商.Vehicles。Any返回类型为IEnumerable的对象,因此您要尝试以下操作:
foreach ( manufacturer in manufacturers) {
manufacturer.Vehicles = (from vehicle in manufacturer.Vehicleswhere vehicle.Type.Name == "Car");
}
这不是有效地做了同样的事情,只是用了不同的方法吗?不,因为返回的类型实现了IEntityWithRelationships not IEnumerable。嗯,当我尝试这种方法时,它仍然返回为IEnumerable。模型优先,技术上它只是ADO.NET,没有EntityFramework。因此,请尝试在查询的末尾添加.ToList:manufacturer.Vehicles=(来自manufacturer.Vehicleswhere vehicle.Type.Name==“Car”)中的vehicle。ToList并告诉我发生了什么