SELECT FirstName, LastName, CompanyName
FROM Users INNER JOIN Contacts ON User.Id = Contacts.UserId
WHERE (FirstName = 'John' AND CompanyName = 'Microsoft') OR CompanyName = 'IBM'
运行SQL:
John Doo Microsoft
John Woo IBM
我们得到了这些结果:
conn.Users.Where(user =>
(user.FirstName=="John" && user.Contacts.Any(contact => contact.CompanyName=="Microsoft"))
|| user.Contacts.Any(contact => contact.CompanyName=="IBM"))
.Select(......);
到目前为止非常简单,对吗? 现在,让我们用C#Lambda或Linq:
写这个Select()
我的问题是,为了达到相同的结果集,我们在最后的VirtualHost
语句中放了什么?
答案 0 :(得分:1)
ON User.Id = Contacts.UserId
表示您从1..*
到User
之间已建立Contact
关系。
这意味着使用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 })