Кажется, вы задаете несколько вопросов здесь.Во-первых, когда вы спрашиваете, куда поместить запрос, это действительно соответствует дизайну, которому вы следите.Шаблон хранилища кажется разумной идеей для доступа к данным во многих случаях, но я не знаю, подходит ли он в вашем случае.Вы уже используете репозитории где-нибудь, например?
Во-вторых, вы ищете рабочий, «общий» запрос (т. Е. Тот, который будет работать для любого количества языков) в SQL или через LINQ?
Если в LINQ, пожалуйста, взгляните на ответы на этот вопрос.Они могут быть применимы: Сводные данные с использованием LINQ
Если в SQL предполагается, что вы используете SQL Server, вы действительно можете выполнить сводку с помощью GROUP BY или, если вы используетеработает последняя версия, оператор PIVOT.Однако ни один из случаев не поддерживает динамическое количество языков - запрошенные столбцы для каждого должны быть объявлены явно.Например:
--GROUP BY
SELECT ct.CatID,
MAX(CASE WHEN l.LangName = 'English' THEN ct.CatName END) AS English,
MAX(CASE WHEN l.LangName = 'French' THEN ct.CatName END) AS French
FROM CategoryText ct INNER JOIN Languages l ON l.LangID = ct.LangID
GROUP BY ct.CatID;
--PIVOT
SELECT ct.CatID, English, French
FROM CategoryText ct INNER JOIN Languages l ON l.LangID = ct.LangID
PIVOT(MAX(ct.CatName) FOR l.LangName
IN([English], [French])) AS P;
Поскольку оператор Pivot не поддерживает динамический оператор, такой как подзапрос в аргументе расширения (IN (английский, французский)), я не уверен, как обрабатывать общий случай,Надеюсь, это, по крайней мере, прояснит ваше направление.