Linq查询 - 多个连接到一个表

时间:2017-10-18 14:09:57

标签: c# linq

Account:
Id|Contact1|Contact2

Contact:
Id|status

我需要一个LINQ查询,它返回contact1和contact2没有特定状态的所有帐户。

var query = from a in accounts
            join c1 in contact on a.contact1 equals c1.id
            join c2 in contact on a.contact2 equals c2.id
            where c1.status != 1 && c2.status != 1
            select new {a.id}

我正在努力克服逻辑。显然,这不会起作用,也不会起作用。只是不确定如何在linq中加入两个表。

编辑: 我发现我的问题在大多数情况下,contact2为null。我需要某种条件连接,只有在a.contact2不为null时才会出现。

为了澄清,我试图实现的逻辑是:检索contact1状态不等于1的所有帐户。如果contact1 == 1,检查contact2 == 1.如果contact2!= 1检索帐户。

遇到问题,因为帐户上的contact2并不总是已填充。如果它为null,则我的原始查询不会检索任何内容。

1 个答案:

答案 0 :(得分:0)

我理解你的逻辑......

只要帐户中的contact1 contact2的状态不是1,就会检索该帐户。仅返回两个联系人状态均为1的帐户。如果任何一个联系人为空,则会被忽略,因为您无法检查状态。

var query = from a in accounts
            from c in contacts
            where c.Id == a.Contact1 || c.Id == a.Contact2
            where c.Status != 1
            select new { a.Id };