C# 从array EF中选择,首先将整个阵列发送到服务器

C# 从array EF中选择,首先将整个阵列发送到服务器,c#,entity-framework,npgsql,C#,Entity Framework,Npgsql,我想用EF做一个基本上像这样的查询 SELECT X.* ,(SELECT myval from mytable where timestamp <= X.timestamp limit 1) FROM (VALUES ('2010-1-1'), ('2012-1-1')) AS X(timestamp) 我有一个功能上是这样的,看起来是这样的: new DateTime[]{ new DateTime(2010,1,1),new DateTime(2012,1,1) }

我想用EF做一个基本上像这样的查询

SELECT 
   X.*
  ,(SELECT myval from mytable where timestamp <= X.timestamp limit 1) 
FROM (VALUES ('2010-1-1'), ('2012-1-1')) AS X(timestamp)
我有一个功能上是这样的,看起来是这样的:

new DateTime[]{ new DateTime(2010,1,1),new DateTime(2012,1,1) }
    .AsQueryable()//I thought this might make it send the array as part of the query but it doesn't.
    .Select(x => new
        {
            MyVal = ctx.MyTable.Where(t => t.Timestamp <= x.Timestamp).Select(t=>t.MyVal).FirstOrDefault(),
            x.Timestamp
        });
这将执行两个查询,因为在C中执行可枚举项,并为每个选定日期生成一个单独的查询。这并不理想,因为如果在我的列表中有很多值,那么当一个查询做得很好时,这将生成大量愚蠢的查询


有没有一种方法可以指示EF/重新构造查询以将整个数组发送到SQL,而不是在C中枚举它?我真的不介意它是否使用values子句或其他东西。

如果性能很关键,请尝试使用存储过程?我可能可以使用存储过程来实现这一点,但这对我所追求的有点苛刻。它也基本上消除了使用EF的任何好处。ToList是否会这样做?这听起来像是延期执行的问题。@DevilSuichiro我不确定我是否理解你的意思?如果我列出这个,我将得到两个独立的SQL查询,这正是我试图避免的。您需要重写您的查询,以便首先从上下文中进行选择,并将其与日期数组连接起来