У меня есть запрос на соединение, и я хочу спроецировать один из объединяемых объектов с некоторыми небольшими изменениями в нем. Я понял, что лучший способ сделать это - проецировать Func
, который вносит необходимые мне изменения.
Из двух списков, к которым я присоединяюсь, один - это List<dynamic>
, а другой -это List<ReceiptBE>
.
My Func
должен возвращать ReceiptBE
, но в проекции соединения, когда я вызываю Func
, результат запроса соединения имеет тип IEnumerable<dynamic>
. Однако, когда я преобразую тот же Func
в метод Inline, результат того же запроса соединения имеет тип IEnumerable<ReceiptBE>
.
Реализация Func:
public void Method1()
{
Func<ReceiptBE, dynamic, ReceiptBE> myFunc = (receipt, link) =>
{
receipt.something = link.something.ToString();
return receipt;
};
var receiptDetails = new List<ReceiptBE>();
var receiptLinks = new List<dynamic>();
//result is IEnumerable<dynamic>
//why is result not IEnumerable<ReceiptBE> ?
var result = from receiptLink in receiptLinks
join receiptDetail in receiptDetails on receiptLink.something.ToString() equals receiptDetail.something
select myFunc(receiptDetail, receiptLink);
//result2 is IEnumerable<ReceiptBE>
var result2 = from receiptLink in receiptLinks
join receiptDetail in receiptDetails on receiptLink.something.ToString() equals receiptDetail.something
select myFunc(receiptDetail, receiptLink) as ReceiptBE;
}
Реализация локального метода:
public void Method2()
{
ReceiptBE myInlineMethod(ReceiptBE receipt, dynamic link)
{
receipt.something = link.something.ToString();
return receipt;
}
var receiptDetails = new List<ReceiptBE>();
var receiptLinks = new List<dynamic>();
//result is IEnumerable<ReceiptBE>
var result = from receiptLink in receiptLinks
join receiptDetail in receiptDetails on receiptLink.something.ToString() equals receiptDetail.something
select myInlineMethod(receiptDetail, receiptLink);
}
Кроме того, когда я пишу myInlineMethod
как метод частного класса, снова тип результата становится IEnumerable<dynamic>
То, что я хочу в result
, равно IEnumerable<ReceiptBE>
и поскольку локальный метод является функцией ac # 7 (мало кто в организации использует VS2015), я застрял с реализацией Func
с приведением.
Пожалуйста, направьте меня в документы, где я могу прочитать об этомповедение Func
.