2013-05-04 73 views
0

我有一些問題在LINQ中的.include包裹着我。我會很感激,如果有人能告訴我的查詢來實現這一點:從LINQ中選擇兩個實體

我有兩個實體,用戶和驗證(這是一系列驗證代碼)。它們在EF5中與1相關:*。我試圖獲得一個User對象並且正在加載Validations集合。

在這一刻,我這樣做(CX是一個使用塊內的上下文):

var user = cx.Users 
      .Where(u => u.UserGuid.Equals(UserGuid)) 
      .FirstOrDefault(); 

if (user == null) 
{ 
    return 0; 
} 

var validation = cx.Validations 
      .Where(v => v.Code.Equals(Code)) 
      .Where(v => v.UserId.Equals(user.UserId)) 
      .FirstOrDefault(); 

但我怎麼在只有一個查詢做到這一點,這樣我就能用

user.Validations.FirstOrDefault(); 

沒有得到錯誤,只通過驗證,滿足Validation.Code ==代碼測試?

感謝您的幫助(我知道我聽起來很困惑,但那是因爲我)。

+0

你試過'user.Validations.FirstOrDefault(v => v.Code.Equals(Code));'? – 2013-05-04 12:53:36

回答

1

您是否嘗試過這樣的事情:

var validation = cx.Validations.Where(v=>v.Code==Code && 
             cx.Users.Any(u=>u.UserID==v.UserID && 
                 u.UserGuid==UserGuid) 
            ).FirstOrDefault(); 
+0

正是我在找的東西。謝謝。 – ilovebigmacs 2013-05-04 13:01:24

1

您可能需要做,包括相關的記錄,以及:

var user = cx.Users 
      .Where(u => u.UserGuid.Equals(UserGuid)) 
      .Include(u => u.Validations) 
      .FirstOrDefault(); 

但你應該能夠選擇要求validaiton與

user.Validations 
    .FirstOrDefault(v => v.Code.Equals(Code));