9999Dave Ответов: 1

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'."

1 Ответов

Рейтинг:
0

Maciej Los

Эта ошибка: A query body must end with a select clause or a group clause
относится к этой строке:

from z in storeDB.Mem join mg in storeDB.Members on z.memberid equals mg.memberid

Вы должны добавить select заявление в конце строки.