【问题标题】:Linq queries - not exists statementLinq 查询 - 不存在语句
【发布时间】:2014-05-26 19:33:30
【问题描述】:

我有课:

class Person
{
    private int _personID;
    private string _fullName;
    ....
    ....
}

class Employee : Person
{
    private List<Project> _projectList;
    ....
    ....
}

class Project
{
    private string _projectCode;
    private List<Employee> _employeeList;
    ....
    ....
}

现在我需要获取与 _personID == 0 的 Employee 从事同一项目的所有员工。Employee.ProjectList 只包含一个项目。

我需要让所有员工都在为谁工作的 PROJECT -> 每个员工在他的 _projectList 中都有相同的 _projectCode。这应该在 LINQ 中完成。

我可以在 SQL 中执行此操作,但现在我使用的是 Db4o 对象数据库和 LINQ,我真的不知道如何处理这种情况。我会感谢任何点击。 (对不起我的英语)。

【问题讨论】:

  • 发布你写的sql查询?
  • 不清楚你在问什么。请发布 SQL,因为它是我们的通用语言。
  • 对于:所有员工都在工作的项目:我现在没有 SQL,因为我使用的是 Db4o。在 SQL 数据库中,我将使用 2 次不存在语句(它的多对多关系)这将类似于 SELECT projectCode FROM Project WHERE NOT EXISTS (SELECT employee.FullName FROM Employee WHERE NOT EXISTS (SELECT attribute FROM join table WHERE join for tables [id.first_table = id.in_second_table AND blah blah]))

标签: c# sql linq


【解决方案1】:

首先 - 如果Employee.ProjectList 恰好包含一个项目,那么考虑不要使用集合来保留这个项目。

查询是:

var employees = Projects.Where(p => p.EmployeeList.Any(e => e.PersonID == id))
                        .SelectMany(p => p.EmployeeList)
                        .Where(e => e.PersonID != id)
                        .Distinct();

更新:DistinctAny 在查询语法中没有等效项,但这里是与上面相同的查询,但具有混合语法:

var employees = (from p in Projects
                 where p.EmployeeList.Any(e => e.PersonID == id)
                 from e in p.EmployeeList
                 where e.PersonID != id
                 select e).Distinct();

【讨论】:

  • 请注意,由于使用First(),这将产生至少两个SQL查询。
  • 再问一个问题,我怎样才能将这个查询构建到这个:var employees = from Project p in db [db = IEmbeddedObjectContainer] where .. and this query
  • @H0ney 添加了查询语法
  • 正是我想要的。现在我只需要弄清楚第二个问题。我只想补充一个事实。对于对象数据库(在我的情况下).. 起始语法是“来自 data_source 中的 CLASS VARIABLE”.. 所以它来自 db 中的 Project p .. 等等,但它只是细节。非常感谢。
猜你喜欢
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-20
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多