c# - 繁琐的 linq 查询

标签 c# linq

我有以下设置:任务、帐户和组表。任务可以分配给个人帐户和组。我制作了两个支持表:TasksAndAccounts 和 AccountsInGroups。 TasksAndAccounts 表具有以下字段:TaskId、AccountId、GroupId 和 AccountsInGroups 具有 AccountId 和 GroupId 字段。我正在尝试编写一个查询,该查询将返回分配给给定帐户 ID 的所有任务。这里的罪魁祸首是查询应该首先在 TasksAndAccounts 表中查找是否有与给定帐户直接相关的任务,然后查找与给定帐户关联的任何组。

基本算法很简单:

  1. 从 TasksAndAccounts 获取所有任务,其中 TasksAndAccounts.AccountId == accountId
  2. 从 AccountsInGroups 中获取所有组,其中 AccountsInGroups.AccountId == accountId
  3. 从 TasksAndAccounts 中获取所有任务,其中 TasksAndAccounts.GroupId 位于第 2 步的结果集中。
  4. 合并步骤 1 和 3。

我尝试了几种不同的方法来解决这个问题,但未能得到任何令人满意的结果。

关于编写优雅的单一查询解决方案有什么想法吗?

最佳答案

这应该转换为 EXISTS 子查询:

var tasks = from task in dc.TasksAndAccounts
            where task.AccountId == accountId || (
                from g in dc.AccountsInGroups
                where g.AccountId == accountId && g.GroupId == task.GroupId
                select g.GroupId
                ).Any()
            select task;

关于c# - 繁琐的 linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1546736/

相关文章:

c# - 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败

c# - 同时多个 AJAX 请求会减慢 ASP.NET WEB API

c# - ConfigureAwait(false) 维护线程身份验证,但默认情况下它不会

c# - 如何返回 IQueryable<T>

c# - dapper 会用谓词做什么?

c# - linq 需要很长时间才能通过 datediff 订购

c# - Entity Framework 按月分组

c# - 多次使用 Include() 时 Entity Framework 代码很慢

c# - “An explicit conversion exists”-LINQ

c# - 如何使用 LINQ 仅获取最后一个日期