Кажется, здесь есть ошибка.
Ваш запрос обрабатывается следующим образом:
IQueryable<IStudentTermData> query =
studentTermDataSet.Join(studentSet,
studentTermData => studentTermData.StudentId,
student => student.Id,
(studentTermData, student) => new {studentTermData, student})
.Where(s => (s.student.Active))
.Select(std => std.studentTermData);
Единственный параметр с именем "конструктор" - это последний параметр метода Join
, ив самом деле, если вы измените код на:
var query =
studentTermDataSet.Join(studentSet,
studentTermData => studentTermData.StudentId,
student => student.Id,
Tuple.Create);
, он будет скомпилирован без предупреждений.
Разница в том, что первый запрос использует перегрузку Join
, которая принимает Expression
в качествепараметр, тогда как второй принимает Func
(и возвращает IEnumerable
).
Так что я думаю, что поддержка деревьев выражений, возможно, еще не завершена.Вы можете задать вопрос на форуме Code Contracts , чтобы спросить об этом.