Почему этот Linq не скомпилируется? - PullRequest
4 голосов
/ 17 мая 2011

В этой упрощенной версии моей настоящей задачи у меня есть две таблицы: 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 }

1 Ответ

9 голосов
/ 17 мая 2011

Имена свойств в ваших анонимных типах должны совпадать.

Вы можете указать имена следующим образом: new { UserId = u.id, Key = "mystring" }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...