C# 使用内部select将Sql转换为Linq

C# 使用内部select将Sql转换为Linq,c#,linq,C#,Linq,如何将此Sql查询转换为LinQ 挑选* 从…起 使用者 加入产品 ON users.id=products.user\u id users.id在何处 选择id 来自用户 其中users.status='Online' 好吧,你的sql太复杂了,子查询是无用的,所以简化它,你会得到一个简单的linq from u in users join p in products on u.id equals p.user_id where u.status == "Online" select new{

如何将此Sql查询转换为LinQ

挑选* 从…起 使用者 加入产品 ON users.id=products.user\u id users.id在何处 选择id 来自用户 其中users.status='Online'
好吧,你的sql太复杂了,子查询是无用的,所以简化它,你会得到一个简单的linq

from u in users
join p in products on u.id equals p.user_id
where u.status == "Online"
select new{u, p};
您的sql可能只是

select * 
from users u
join products p on u.id = p.user_id
where u.status = 'Online' 

您根本不需要内部选择

SELECT *
FROM
    users
    JOIN products
        ON users.id = products.user_id
WHERE
    users.status = 'Online'
现在,将其转换为LINQ查询是小菜一碟


注意:如果要查询另一个表,则需要一个带有嵌套SELECT的IN子句,该表在联接时将产生更多的输出行,因为它与查询中已包含的一个表具有1:n关系。

我假设您具有以下实体:

class User {
    public int Id { get; set; }
    public string Status { get; set; }
    public IList<Product> Products { get; set; }
}

class Product {
    public int Id { get; set; }
    public int UserId { get; set; }
    public User User { get; set; }
}

谢谢,但我假设查询是这样的,以了解如何处理内部选择
var result = 
    from user in users
    join product in products on user.Id equals product.UserId 
    where user.Status == "online"
    select new { user, product };