#linq #join #field
#linq #Присоединиться #поле
Вопрос:
В приведенном ниже соединении я хотел бы использовать несколько полей для выполнения объединения, а не только одно поле.
var join = group.Join(procSums, g => g.DeptID, ps => ps.key.deptID, (g, ps)...
Во всех примерах, которые я нашел, для этого используется стиль запроса, и я не могу его перевести.
Спасибо!
Ответ №1:
Вам просто нужно присоединиться на основе новых анонимных объектов:
// ClasID is a placeholder, it could be any property you'd like
var join = group.Join(procSums,
g => new { g.DeptID, g.UnitLoc, g.Proc },
ps => new
{
DeptID = ps.key.deptID,
UnitLoc = ps.key.unitLoc,
Proc = ps.key.procName
},
(g, ps) => new { g, ps });
Комментарии:
1. Хорошо, вот оно
var join = group.Join(procSums, g => new { g.DeptID, g.UnitLoc, g.Proc }, ps => new { ps.key.deptID, ps.key.unitLoc, ps.key.procName }, (g, ps) => new { g, ps });
Но в нем есть ошибка, указывающая, что аргументы типа не могут быть выведены. Типы одинаковы, они точно совпадают.2. @user259286 — Имена свойств в анонимных типах (а также их типы) должны точно совпадать. Я обновлю свой ответ.
Ответ №2:
Вам нужно передать лямбда-выражения, которые создают анонимные типы с полями.
Например:
group.Join(procSums, g => new { g.DeptID, g.OtherField }, ps => new { ps.key.deptID, ps.key.OtherField }, ...)
Анонимные типы должны точно совпадать.