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为空。我需要某种仅在a.contact2不为null的情况下才会发生的条件连接。

为了明确起见,我尝试实现的逻辑是:检索contact1状态不等于1的所有帐户。如果contact1 == 1,请检查contact2 ==1。如果contact2!= 1,则检索该帐户。

由于帐户中的contact2并非始终填充,因此遇到了问题。当它为null时,我的原始查询无法检索任何内容。

最佳答案

我想我已经正确理解了您的逻辑...

只要帐户上的contact1contact2的状态不是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 };

关于c# - Linq查询-多个联接到一个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46812217/

10-13 06:58