子对象属性的 Linq 包含
本文关键字:Linq 包含 属性 对象 | 更新日期: 2023-09-27 18:36:28
列出的项可以是设备和车辆的父对象。我想根据子类的对象类型包含子类的属性。
var type = GetAllQuery(context).FirstOrDefault(x => x.Id == id);
var listedItem = GetAllQuery(context)
.Include(x => x.Images)
.Include(x => x.User);
if (type.GetType().BaseType == typeof(Vehicle))
{
var vehicle = listedItem as IQueryable<Vehicle>;
return vehicle.Include(x => x.VehicleBrand).Include(x => x.VehicleModel).FirstOrDefault(x => x.Id == id);
}
设备也是如此。 由于某种原因,车辆返回 null,我似乎找不到原因。有什么想法吗?
包含在EF返回ObjectQuery<T>
中,则不应将其转换为Queryable
。 使用as ObjectQuery<Vehicle>
。但是您实际上不需要转换,它已经是车辆类型
还要清理代码,如果用开关替换,最好建议使用工厂。
像这样的东西
public class IncludeConfiguratorFactory
{
public static IConfigurator Get<T>(T type)
{
switch (type.Name)
{
case "Vehicle":
return new VehicleConfigurator();
}
}
}
public class VehicleConfigurator : IConfigurator
{
#region IConfigurator Members
public void Configure<T>(ObjectQuery<T> items ) where T : Vehicle
{
var vehicle = items.Include(x => x.VehicleBrand);
vehicle = items.Include(x => x.VehicleModel);
}
#endregion
}
public interface IConfigurator
{
void Configure<T>(ObjectQuery<T> items);
}
并调用为
var listedItem = GetAllQuery(context).Include(x=>x.Images).Include(x => x.User);
var provider = IncludeConfiguratorFactory.Get(itemType);
provider.Configure(listedItem);
请注意:上述代码未经测试,可能包含语法错误