Linq 中的简单 SQL 语句

本文关键字:SQL 语句 简单 Linq | 更新日期: 2023-09-27 18:34:04

Table: Users
ID123   John Doo
ID345   John Woo
Table: Contacts
ID123  Microsoft  johnd@microsoft.com  +1-234567
ID345  Private Co johnw@privateco.com  +9-654321 
ID345  IBM        johnw@ibm.com        +1-456789

运行 SQL:

SELECT FirstName, LastName, CompanyName 
FROM Users INNER JOIN Contacts ON User.Id = Contacts.UserId
WHERE (FirstName = 'John' AND CompanyName = 'Microsoft') OR CompanyName = 'IBM'

我们得到这些结果:

John   Doo   Microsoft
John   Woo   IBM

到目前为止很简单,对吧?现在,让我们用 C# Lambda 或 Linq 来写这个:

conn.Users.Where(user => 
(user.FirstName=="John" && user.Contacts.Any(contact => contact.CompanyName=="Microsoft"))
|| user.Contacts.Any(contact => contact.CompanyName=="IBM"))
.Select(......);

我的问题是,我们在最后的Select()语句中放了什么才能获得相同的结果集?

Linq 中的简单 SQL 语句

ON User.Id = Contacts.UserId表示您从UserContact的关系1..*

这意味着使用 Linq ,您必须从查询 Contacts 开始,而不是Users,因为结果将为每个联系人提供一行,而不是每个用户一行。

这样的东西会起作用:

conn.Contacts
     .Where(c => c.CompanyName == "IBM" ||
                (c.CompanyName == "Microsoft" && c.User.FirstName == "John"))
     .Select(c => new { c.User.FirstName, c.User.LastName, c.CompanyName })