【发布时间】:2010-03-15 13:46:17
【问题描述】:
假设我有一个Customer 表,其中有一个PrimaryContactId 字段和一个SecondaryContactId 字段。这两个都是引用Contact 表的外键。对于任何给定的客户,可以存储一个或两个联系人。换句话说,PrimaryContactId 永远不可能是NULL,但SecondaryContactId 可以是NULL。
如果我将Customer 和Contact 表放到“Linq to SQL 类”设计图面上,类构建器将发现从Customer 表到Contact 表的两个FK 关系,依此类推生成的Customer 类将有一个Contact 字段和一个Contact1 字段(我可以将其重命名为PrimaryContact 和SecondaryContact 以避免混淆)。
现在假设我想获取一组给定客户的所有联系人的详细信息。
如果总是只有一个联系人,那么我可以这样写:
from customer in customers
join contact in contacts on customer.PrimaryContactId equals contact.id
select ...
...这将被翻译成类似:
SELECT ...
FROM Customer
INNER JOIN Contact
ON Customer.FirstSalesPersonId = Contact.id
但是,因为我想加入两个联系人字段,我希望 SQL 看起来像:
SELECT ...
FROM Customer
INNER JOIN Contact
ON Customer.FirstSalesPersonId = Contact.id OR Customer.SecondSalesPersonId = Contact.id
如何编写一个 Linq 表达式来做到这一点?
【问题讨论】:
-
INNER JOIN不只是写WHERE的不同方式吗?
标签: linq linq-to-sql