Рейтинг:
4
Richard Deeming
Начните с упрощения SQL-запросов :
SELECT
memberid,
spid,
score
FROM
Mem_Gifts As e
WHERE
score =
(
SELECT MAX(w.score)
FROM Mem As w
WHERE w.memberid = e.memberid
)
;
Нет необходимости в этом
GROUP BY
или
HAVING
предложения, поскольку вы используете коррелированный подзапрос.
Чтобы получить аналогичный результат в LINQ, попробуйте что - то вроде этого:
var result = storeDB.MemGifts
.Where(e => e.Score == storeDB.Mem.Where(w => w.MemberId == e.MemberId).Max(w => w.Score))
.Select(e => new { e.MemberId, e.Spid, e.Score });
9999Dave
Это сработало. Мой единственный комментарий-Это Mem_Gifts в моем, и пример должен быть Mem. Typeo мной. Все это прекрасно работало!
Richard Deeming
Если это тот же самый стол, то вы должны быть в состоянии сделать:
var result = storeDB.Mem
.GroupBy(e => e.MemberId, (key, list) => list.OrderByDescending(e => e.Score).First())
.Select(e => new { e.MemberId, e.Spid, e.Score });
Или, если Entity framework не может преобразовать это в SQL-запрос, то:
var result = storeDB.Mem
.GroupBy(e => e.MemberId)
.Select(group => group.OrderByDescending(e => e.Score).First())
.Select(e => new { e.MemberId, e.Spid, e.Score });
9999Dave
Я просто изменил storeDB.MemGifts на storeDB.Mem в первом ответе, и это сработало нормально.