如何使用LinQ lambda表达式编写此查询

时间:2015-02-19 12:52:18

标签: linq join lambda entity

SELECT PropertyCommnets.commnet_content, 
       PropertyCommnets.commnet_date, 
       users.user_name, 
       propertycommnets.commnet_id 
FROM   PropertyCommnets  
       INNER JOIN aspnet_users 
               ON propertycommnets.userid = aspnet_users.userid 
       INNER JOIN users 
               ON aspnet_users.userid = users.userid 

我写了这个但是不正确:

from a in context.PropertyCommnets 
join b in context.aspnet_Users 
on a.UserId equals b.UserId 
join c in context.Users 
on b.UserId equals c.UserId 
where a.property_id == PropertyId 
select(c.user_name ).FirstOrDefault()

2 个答案:

答案 0 :(得分:0)

a)您是否有特定原因加入aspnet_users? 您没有使用aspnet_users.userid

b)您的尝试是Linq SQL而不是Lambda表达式。

c)您的用户模型中是否有虚拟的propertycommnets集合?如果不是,我会考虑到这一点。然后,您可以简单地调用user.propertycommnets以及该特定用户的注释。

答案 1 :(得分:0)

我不明白你最后在select尝试了什么。与您的SQL查询相比,该语法无效且FirstOrDefault也不正确。

试试这个:

from a in context.PropertyCommnets 
join b in context.aspnet_Users 
on a.UserId equals b.UserId 
join c in context.Users 
on b.UserId equals c.UserId 
where a.property_id == PropertyId 
select new {  
    commnet_content = a.commnet_content,
    commnet_date = a.commnet_date,
    user_name = c.user_name,
    commnet_id = a.commnet_id,
};

但是,这仍然是查询语法而不是方法/ lambda语法。有关系吗?使用连接查询语法更具可读性。