Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过条件列表选择实体_C#_Entity Framework - Fatal编程技术网

C# 通过条件列表选择实体

C# 通过条件列表选择实体,c#,entity-framework,C#,Entity Framework,标题有点复杂,我无法用一句话概括我想要完成的事情。考虑到以下edmx: 我如何选择拥有一个所有者ID的RegisteredVehicle的所有停车请求 1车主可以有许多车辆,因此我需要检索单个个人拥有的任何车辆发出的所有停车请求。我现在有 var entity = await context.AspNetUsers.Include(P => P.RegisteredVehicles .Select(A => A.MakeSource

标题有点复杂,我无法用一句话概括我想要完成的事情。考虑到以下edmx:

我如何选择拥有一个所有者ID的RegisteredVehicle的所有停车请求

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);  
此查询基本上是选择一个用户实体,其中包含其各自注册的所有车辆以及车辆的元信息,如品牌名称、型号名称、年份、颜色等。然后在最后,我尝试包括属于此用户的所有停车请求,但我得到了所有用户的所有请求。我想这是因为我的parking requests表中没有userId nav属性,而是试图检索单个userId拥有的所有车辆的数据


ps我还尝试了
.Include(F=>F.ParkingRequests.Select(D=>D.RegisteredVehicle.OwnerId==id))
,但也遇到了错误,说明我需要正确使用导航属性。我假设这是因为我在单个实体“registeredvehicle”上使用了Select,而不是在集合上使用了Select。使用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();

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

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;

投票被否决有两个原因。解决方案不起作用,使用linq查询表达式也不容易。@RobertMcKee它怎么不起作用?你想让我给我的屏幕录像,这样你就可以看到结果了吗?第二个原因是观点。我是原始帖子的作者,所以我加入了我的观点。使用linq表达式似乎更容易,因为我可以访问对象
request
本身。这确实有效,所以我认为没有必要进行向下投票,但感谢您至少提供了反馈,而不是鬼影向下投票。我看不出您的查询表达式比说更简单
var requests=context.ParkingRequests.Where(r=>vehIds.Contains(r.RegisteredVehicleId))根据其不起作用的原因,您正在选择每一辆注册车辆,而不管用户是谁,这不是您的OP所要求的。如果你愿意,我可以在测试数据上发布一段视频。