按条件列表选择实体

时间:2014-10-01 19:40:26

标签: c# entity-framework

标题有点复杂我无法用一句话来完成我想要完成的内容。考虑下面的edmx:
enter image description here

如何选择具有由单个OwnerID拥有的RegisteredVehicle的所有ParkingRequests?

1车主可以拥有多辆车,因此我需要检索由一个人拥有的任何车辆提出的所有停车请求。我目前有

         var entity = await context.AspNetUsers.Include(P => P.RegisteredVehicles
                .Select(A => A.MakeSource)).Include(P => P.RegisteredVehicles
                .Select(B => B.ModelSource)).Include(P => P.RegisteredVehicles
                .Select(C => C.YearSource))
                .Include(F => F.ParkingRequests)
                .SingleOrDefaultAsync(G => G.Id == id);  

此查询基本上选择一个用户实体及其各自的注册车辆和车辆的元信息,如品牌名称,型号名称,年份,颜色等。然后,最后我试图包括属于此的所有停车请求用户,但我收到所有用户的所有请求。我想这是因为我的停车请求表中没有userId nav属性,而是尝试通过单个userId拥有的所有车辆检索数据。

ps我也试过做.Include(F => F.ParkingRequests.Select(D => D.RegisteredVehicle.OwnerId == id))但也遇到了错误,说明我需要正确使用导航属性。我假设那些是因为我在单个实体'registeredvehicle'上使用Select而不是在集合上

2 个答案:

答案 0 :(得分:1)

让我为您提供更快的解决方案:

var ownerId = 1;
var query =
   from request in context.ParkingRequests
   join vehicle in context.Vehicles on request.RegisteredVehicleId equals vehicle.Id
   where vehicle.ownerId == ownerId
   select request;

答案 1 :(得分:-1)

使用linq查询表达式会更容易。我最终将原始查询拆分为两个,使用以下linq表达式获取与任何一个人的注册车辆相关的所有停车请求。

var vehIds = entity.RegisteredVehicles.Select(P => P.Id).ToList();

            var requests = from request in context.ParkingRequests
                           where vehIds.Contains(request.RegisteredVehicleId)
                           select request;
            var orderedRequests = requests.OrderByDescending(P => P.DateAndTime).ToList();