Приведенный выше запрос, если он написан непосредственно на SQL, будет написан так (псевдокод):
SELECT
X.NAME AS NAME,
(CASE R.TYPE WHEN A THEN R ELSE NULL) AS TypeARelated,
(CASE R.TYPE WHEN B THEN R ELSE NULL) AS TypeBRelated
FROM Items AS X
JOIN Related AS R ON <some field>
Однако linq-to-sql не так эффективен, как вы пояснили, он делаетприсоединиться, а затем перейти к индивидуальному сравнению каждой записи.Лучше было бы использовать два запроса linq, аналогичные вашему первому примеру, которые генерировали бы два запроса SQL.Затем используйте результаты двух запросов linq и присоединитесь к ним, что не приведет к созданию оператора SQL.Этот метод ограничил бы количество запросов, выполняемых в SQL, до 2.
Если число условий ierType == "A" и т. Д., Со временем будет увеличиваться или будут добавлены другие условия,Вам лучше использовать хранимую процедуру, которая всегда будет одним SQL-запросом.
Hasanain