2015-03-25 41 views
1

我有以下SQL語句:LINQ查詢使用實體框架來獲得一個連接相關數據6

DECLARE @UserID INT 

SELECT Col1, Col2, Col3, @UserID = UserID 
FROM Users 
WHERE UserName = <username> AND Password = <password> 

SELECT Col1, Col2, Col3 
FROM ClientUser 
WHERE UserID = @UserID 

有在上面查詢兩個SELECT語句,一個擺脫了UserID,其他列信息Users表和第二個基於@UserID值從另一個表中獲取信息。如何在entity framework上下文中編寫linq查詢來執行此選擇而不連接數據庫多次?

+0

您可以使用linq連接基於用戶標識符連接兩個表,然後獲取。這樣它將只使用一個數據庫命中 – 2015-03-25 07:00:52

回答

0

讓我們假設你有兩個類,User和ClientUser,它們是你的實體框架模型的一部分。他們可能看起來像這樣。

public class User 
{ 
    public int UserId { get; set; } 
    public string Col1 { get; set; } 
    //More to be here 

    public virtual ICollection<ClientUser> Clients { get; set; } 
} 

public class ClientUser 
{ 
    public int ClientId { get; set; } 
    public int UserId { get; set; } 

    public virtual User User {get; set;} 
} 

默認情況下你會使用延遲加載,因爲我將它們定義爲虛擬。如果你知道你需要更多的,只是這樣做

var query = YourContext.Users.Get().Include(x => x.Clients); 

然後添加你需要查詢什麼。通過使用「包含」,它可以確保EF快速而不是懶惰地提取數據。