2014-10-01 72 views
-2

標題有點複雜我無法真正地將我想要在一個句子中完成的內容封裝起來。考慮下面的edmx:
enter image description here通過條件列表選擇實體

我怎樣才能選擇所有ParkingRequests擁有由一個OwnerID擁有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); 

該查詢基本上選擇與所有各自登記的車輛一個用戶實體和車輛的元信息,如使名稱,型號名稱,年份,顏色等,然後​​在最後我想包括屬於該用戶的所有停車請求,但我收到所有用戶的所有請求。我想這是因爲我的停車請求表中沒有userId nav屬性,而是試圖通過單個userId擁有的所有車輛檢索數據。

ps我也試過做.Include(F => F.ParkingRequests.Select(D => D.RegisteredVehicle.OwnerId == id)),但也遇到錯誤,說明我需要正確使用導航屬性。我假設這些是由於我在單個實體「registered車輛」上使用了Select而不是在集合上的事實

回答

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

這使用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(); 
+0

Downvoted有兩個原因。解決方案不起作用,並且使用linq查詢表達式並不容易。 – 2014-10-01 20:25:27

+0

@RobertMcKee它不起作用?你想讓我拍攝我的屏幕視頻,以便看到結果嗎?第二個原因是意見。我是原帖的作者,所以我包括了我的意見。使用linq表達式似乎更容易,因爲我可以訪問對象'request'本身。這確實有效,所以我不認爲downvote是必要的,但感謝您至少提供反饋,而不是幽靈downvoting。 – Adrian 2014-10-01 20:49:21

+0

我看不出你的查詢表達式比說... var requests = context.ParkingRequests.Where(r => vehIds.Contains(r.RegisteredVehicleId));'爲什麼它不起作用,你是選擇每個註冊的車輛而不管用戶,這不是你的OP所要求的。如果你願意的話,我可以發佈一個關於測試數據的視頻。 – 2014-10-02 15:00:40