linq查询需要帮助

linq查询需要帮助,linq,entity-framework,Linq,Entity Framework,这是我的SQL表: 我 我正在使用实体框架并尝试创建一个LINQ查询,该查询返回每个人最早日期时间值的所有数据所有列,其中状态不等于“null”。对于当前数据集,它应该返回id为3,4,8的行 SQL查询如下所示: SELECT A.* FROM MyTable A INNER JOIN ( SELECT person, Min([datetime]) as mindate FROM MyTable WHERE [status] is not null

这是我的SQL表:

我正在使用实体框架并尝试创建一个LINQ查询,该查询返回每个人最早日期时间值的所有数据所有列,其中状态不等于“null”。对于当前数据集,它应该返回id为3,4,8的行

SQL查询如下所示:

SELECT A.*
FROM MyTable A
INNER JOIN ( SELECT person, Min([datetime]) as mindate
       FROM MyTable
       WHERE [status] is not null
       GROUP BY person, convert(date, [datetime])) B
on A.person = B.person
and A.datetime = B.mindate
我如何用LINQ来表达这一点?除了作为一个整体的查询之外,datetime列允许示例数据集中未显示的空值,这一事实让我很难接受。这使得enityframework创建了一个可为null的DateTime类型的属性?这进一步使我的LINQ查询复杂化了


提前谢谢

这可能不是最有效的LINQ,但可以满足您的需要:

var query = 
from person in MyTable
let dates = from p in MyTable where p.Person == person.Person && p.Status != null orderby p.DateTime select p
let earliest = dates.First()
group earliest by earliest.Person into grouped 
select grouped.First();
而且添加代码来处理可为空的日期非常简单,这取决于您想对它做什么

var query = 
from person in MyTable
let dates = from p in MyTable where p.Person == person.Person && p.Status != null orderby p.DateTime select p
let earliest = dates.First()
group earliest by earliest.Person into grouped 
select grouped.First();