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()
语句中放了什么才能获得相同的结果集?
ON User.Id = Contacts.UserId
表示您从User
到Contact
的关系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 })