У меня есть запрос, который выглядит примерно так, что работает, как должно:множественным LINQ соединяется с анонимными типами с помощью лямбда-синтаксис
ColumnA
.Join(ColumnB,
ColumnA => ColumnA.value,
ColumnB => ColumnB.value,
(ColumnA, ColumnB) => new {ColumnA, ColumnB})
.Join(ColumnC,
join1 => join1.ColumnA.value,
ColumnC => ColumnC.value,
(join1, ColumnC) => new {join1, ColumnC})
.Join(ColumnD,
join2 => join2.ColumnC.Value,
kobling => ColumnD.Value,
(join2, jk1Kobling) => new{ ... })
Теперь мне нужно добавить дополнительный столбец к второму присоединиться, и я попробовал то, что показано ниже. На данный момент я еще не добавил новый столбец для соединения, но я планировал (/* new col */
в коде). Проблема в том, что Linq, по-видимому, сейчас не в состоянии выводить типы. Почему это происходит, и есть ли какой-либо простой способ избежать этой проблемы, не создавая определенный тип только ради соединения?
Ошибка:
The type arguments for method
'System.Linq.Queryable.Join<TOuter,TInner,TKey,TResult>(...) cannot
be inferred from the usage. Try specifying the type arguments explicitly.
код Я пытаюсь запустить:
ColumnA
.Join(ColumnB,
ColumnA => ColumnA.value,
ColumnB => ColumnB.value,
(ColumnA, ColumnB) => new {ColumnA, ColumnB})
.Join(ColumnC,
join1 => new {join1.ColumnA.value, /* new col */ },
ColumnC => new {ColumnC.value, /* new col*/ },
(join1, ColumnC) => new {join1, ColumnC})
.Join(ColumnD,
join2 => join2.ColumnC.Value,
kobling => ColumnD.Value,
(join2, jk1Kobling) => new{ ... })
Update в ответ на ссылку в комментарии ниже: Проблема связана с две средние линии:
.Join(ColumnC,
join1 => new { join1.ColumnA.value },
ColumnC => new { ColumnC.value },
(join1, ColumnC) => new {join1, ColumnC})
Я теперь попытался следующие две вещи, без каких-либо изменений в результате:
join1 => new { join1.ColumnA.value },
ColumnC => new { value = ColumnC.value }
join1 => new { value = join1.ColumnA.value },
ColumnC => new { value = ColumnC.value }
Я до сих пор не могу понять, как определить, что сравнивать. Любая помощь будет принята с благодарностью.
http://stackoverflow.com/a/19135333/580053? – Dennis
Спасибо за ссылку, @Dennis, но я точно не знаю, как это относится к этой ситуации. См. Мое обновление. Возможно, я пропустил что-то в вашем связанном сообщении? – Kjartan
Будет лучше, если вы разместите кусок своего реального кода вместо псевдокода. Если 'ColumnA' является' IEnumerable '(или' IQueryable '), то что означает' ColumnA.value'? –
Dennis