Start by simplifying your SQL query:
SELECT
memberid,
spid,
score
FROM
Mem_Gifts As e
WHERE
score =
(
SELECT MAX(w.score)
FROM Mem As w
WHERE w.memberid = e.memberid
)
;
No need for the
GROUP BY
or
HAVING
clauses, since you're using a correlated sub-query.
To get a similar result in LINQ, try something like this:
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 });