2015-03-25 16 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快速而不是懒惰地提取数据。