У меня есть условие, когда присоединяющийся стол имеет условие.Допустим, у меня есть таблица с именем Mapper
Student
Teacher
, где Mapper
таблица содержит столбец с именем AcNoId
, который содержит идентификатор из обеих таблиц Student
и Teacher
.Структура таблицы:
Mapper
Ученик
Учитель
TestOption является перечислением и определяется как
public enum TestOption
{
Teacher = 1,
Student = 2
}
Теперь у меня есть условие, когда, если TestOption является типом ученика, он должен выполнить объединение с таблицей ученика, и еслитип Учителя, которому следует выполнить соединение с таблицей Учителя. Вот как я пытался до сих пор
(from m in _context.Mapper
where m.TestOption == TestOption.Student
join s in _context.Student
on m.AcNoId equals s.Id into tempStudent
from st in tempStudent.DefaultIfEmpty()
where m.TestOption == TestOption.Teacher
join t in _context.Teacher
on m.AcNoId equals t.Id into tempTeacher
from ta in tempTeacher.DefaultIfEmpty()
select new
{
Type = m.TestOption.ToString(),
Student = st.StudentName ?? string.Empty,
Teacher = ta.TeacherName ?? string.Empty
}).ToList();
Вместо условного объединения этот запрос выполняет следующий запрос на SQL Profiler
exec sp_executesql N'SELECT [m].[TestOption], COALESCE([s].[StudentName], @__Empty_0) AS [Student], COALESCE([t].[TeacherName], @__Empty_1) AS [Teacher]
FROM [Mapper] AS [m]
LEFT JOIN [Student] AS [s] ON [m].[AcNoId] = [s].[Id]
LEFT JOIN [Teacher] AS [t] ON [m].[AcNoId] = [t].[Id]
WHERE ([m].[TestOption] = 2) AND ([m].[TestOption] = 1)',N'@__Empty_0 nvarchar(4000),@__Empty_1 nvarchar(4000)',@__Empty_0=N'',@__Empty_1=N''
Как мне это сделать ????