Требуется помощь по запросу linq - PullRequest
1 голос
/ 15 сентября 2010

Это моя таблица SQL:

i

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

Я использую Entity Framework и пытаюсь создать запрос 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?Помимо запроса в целом, я боролся с тем, что столбец datetime допускает нулевые значения (не показано в примере набора данных).Это заставляет enityframework создавать свойство типа DateTime с нулевым значением?что еще больше усложняет мой запрос LINQ.

Заранее спасибо!

1 Ответ

0 голосов
/ 15 сентября 2010

Это, вероятно, не самый эффективный 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();

и достаточно просто добавить код для обработки нулевой даты, в зависимости от того, что вы хотите с ней сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...