Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF从同一个表中选择两次_C#_Sql_Entity Framework_Join - Fatal编程技术网

C# EF从同一个表中选择两次

C# EF从同一个表中选择两次,c#,sql,entity-framework,join,C#,Sql,Entity Framework,Join,我有一张桌子 Task task_id int name varchar 和桌子 Event event_id int autoincrement time timestamp task_id int 一个任务有许多创建、挂起、执行、完成等事件 我想在一个查询中显示任务及其最后一个事件。我提出了以下声明: var q = context.Event .Include(x => x.Task) .Where(e =&

我有一张桌子

Task
  task_id int
  name varchar
和桌子

  Event
      event_id int autoincrement
      time timestamp
      task_id int
一个任务有许多创建、挂起、执行、完成等事件

我想在一个查询中显示任务及其最后一个事件。我提出了以下声明:

var q = context.Event
      .Include(x => x.Task)
      .Where(e => e.EventId == e.Task.Event.Max(e1 => e1.EventId))
      .Select(x => new
      {
         x.Task.Name
         x.EventId,
         x.Time,
      });
哪个渲染到SQL:

  SELECT t.name, e.event_id, e.time
      FROM event AS e
      INNER JOIN task AS t ON e.task_id = t.task_id
      WHERE e.event_id = (
          SELECT MAX(e0.event_id)
          FROM task.event AS e0
          WHERE t.task_id = e0.task_id)
很好,但现在我想知道是否有可能对任务中的第一个事件也这样做。所以我需要加入同一个表两次,然后卡住

我需要以下SQL的EF C子句:

SELECT t.name, e1.event_id, e1.ts, e2.event_id, e2.ts
FROM event e1, event e2, task t
 WHERE t.task_id = e1.task_id
 AND e1.task_id = e2.task_id
 AND e1.event_id = (
          SELECT MIN(event_id)
          FROM event
          WHERE task_id = t.task_id)
 AND e2.event_id = (
          SELECT MAX(event_id)
          FROM event
          WHERE task_id = t.task_id)

请帮助

如果要检索每个任务及其第一个和最后一个事件的数据,这将有助于该任务为其关联事件设置导航属性。然后,您可以采用以下方法:

var q = context.Task
  .Select(t => new
  {
     t.Name
     FirstEvent = x.Events
         .OrderBy(e => e.Time)
         .Select(e => new { e.EventId, e.Time })
         .FirstOrDefault()
     LastEvent = x.Events
         .OrderByDescending(e => e.Time)
         .Select(e => new { e.EventId, e.Time })
         .FirstOrDefault()
  });

请看一下“let”关键字,它可能会帮助您处理此子句