LINQ查询需要帮助

这是我的SQL表格:

一世

d     person        datetime        status   description1  description2
----------- -------------------- ----------------------- ---------- --------------- ---------------
1      personA       2010-01-01 20:00:00.000 A     desc1      desc2

2      personA       2010-01-01 21:00:00.000 B     desc3      desc4

3      personA       2010-01-01 19:00:00.000 A     desc5      desc6

4      personB       2010-01-01 20:00:00.000 A     desc7      desc8

5      personB       2010-01-01 21:00:00.000 A     desc9      desc10

7      personB       2010-01-01 18:00:00.000 NULL    desc11     desc12

8      personB       2010-01-02 19:00:00.000 A     desc13     desc14

9      personB       2010-01-02 20:00:00.000 A     desc15     desc16

我正在使用实体框架,并尝试创建一个LINQ查询,返回所有数据(所有列)的最早日期时间值,每个人的状态不等于'空'。 对于当前数据集,它应该返回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中表达这一点? 除了查询作为一个整体以外,我努力应对日期时间列允许空值(未在示例数据集中显示)的事实。 这使得enityframework创建了一个可为空的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();

并且很容易添加代码来处理可空日期,这取决于你想要用它做什么。

链接地址: http://www.djcxy.com/p/51353.html

上一篇: Help needed on linq query

下一篇: Null value cannot be assigned