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

标签 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 为空。我需要某种只有在 a.contact2 不为空时才会发生的条件连接。

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

遇到问题是因为帐户上的 contact2 并不总是被填充。当它为空时,我的原始查询不会检索到任何内容。

最佳答案

认为我正确理解了您的逻辑...

只要帐户上的 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 };

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

相关文章:

c# - 动态添加面板c#

c# - PagedList与ViewModels和.Skip()。Take()一起使用

c# - 如何在 linq 中获取数据库和本地序列之间的笛卡尔积?

c# - 具有父子关系的自引用表使用 LINQ 表示文件树

c# - 使用 LINQ 解析 XML 获取子元素

c# - 在单元测试中模拟 HttpClient

c# - 无限循环使 TimeManager 无效

linq - 使用 LINQ to SQL 更新

C# DotNetZip 错误 : The final hash has not been computed. 在 Ionic.Zip.WinZipAesCipherStream.get_FinalAuthentication()

C#:将用户定义的类型传递给 Oracle 存储过程