Linq中的简单Sql语句?

时间:2016-02-11 02:51:32

标签: c# sql entity-framework linq

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语句中放了什么?

1 个答案:

答案 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 })