В этой упрощенной версии моей настоящей задачи у меня есть две таблицы: User
и Metadata
.Каждый пользователь может иметь различное количество записей метаданных, связанных с ним с помощью FKEY.
Этот Linq прекрасно компилируется:
var user = from u in Context.Users
join m in Context.Metadata
on u.id equals m.userid
select new { u.id, m.value }
Однако, если я заменю строку предложения on на:
on new { u.id } equals new { m.userid }
не скомпилируется с этой ошибкой:
error CS1941: The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.
Кто-нибудь знает почему?
А для бонусных очков:
IВ конечном итоге я пытаюсь выполнить такой запрос:
var user = from u in Context.Users
join m in Context.Metadata
on new { u.id, "mystring" } equals new { m.userid, m.key }
select new { u.id, m.value }
Обратите внимание на использование литерала "mystring"
.Излишне говорить, что это тоже не работает.
Спасибо!
РЕДАКТИРОВАТЬ: Ответ SLaks работал, но просто чтобы быть полностью ясным о том, о чем он говорит,последнее предложение on
, которое работает, выглядит так:
on new { id = u.id, key = "foo" } equals new { id = mu.userid, key = m.key }