C# для написания инструкции LINQ формируют SQL с помощью команды Join
Мне нужно преобразовать следующий оператор sql в linq.
SELECT e.memberid, e.spid, e.Score, m.Class FROM Mem AS e INNER JOIN Members AS m ON e.memberid = m.membersid WHERE (e.Score = (SELECT MAX(Score) AS Expr1 FROM Mem AS w WHERE (memberid = e.memberid)) ) AND (m.Class = '1st grade')
Это то же самое, что https://www.codeproject.com/Questions/5261381/Csharp-writing-an-linq-group-by-and-having-stateme кроме того, я добавил соединение, чтобы дать имя класса в результате и отфильтровать по классу.
Что я уже пробовал:
Я пытался,
var maxScore2 = (from z in storeDB.Mem join mg in storeDB.Members on z.memberid equals mg.memberid) .Where(e => e.Score == storeDB.Mem.Where(w => w.memberid == e.memberid).Max(w => w.Score)) .Where(t => t.sid == (i + 1)) .Select(e => new { e.memberid, e.spid, e.Score });
и
var mem_con_mem = from h in m_members join mg in storeDB.Mem on h.memberid equals mg.memberid select h.First_Name; maxScore2 = mem_con_mem .Where(e => e.Score == storeDB.Mem.Where(w => w.memberid == e.memberid).Max(w => w.Score)) .Where(t => t.spid == (i + 1)) .Select(e => new { e.memberid, e.spid, e.Score });
оба дают ошибки.
Richard Deeming
Какие ошибки?
9999Dave
Первое ВКЛ в конце второй строки говорит: "тело запроса должно заканчиваться предложением select или предложением group.
Второй в e.Score дает ошибку: "String не содержит определения для 'Score' и не может быть найден доступный метод расширения 'Score', принимающий первый аргумент типа 'string'." а в e.memberid он выдает ошибку: "String не содержит определения для 'memberid' и не может быть найден доступный метод расширения 'memberid', принимающий первый аргумент типа 'string'."