2015-07-17 7 views
2

У меня есть запрос EF, который возвращает анонимный тип нескольких объединенных таблиц. Я передаю это другой функции в качестве динамической. Есть ли способ передать динамику анонимному типу известного анонимного типа? Если есть способ сделать это, я бы предположил, что передача его как объекта лучше, чем динамика, это правильно?Кастинг объекта/Динамический для анонимного типа

... 
var appts = (from a in dbc.tblAppt join b in dbc.tblApptTypes on a.Type equals b.Type select new {a, b}).ToList(); 
If (appts.Any()) 
    ProcessAppts(appts); 
} 

void ProcessAppts(dynamic appts) 
{ 
    var AnonTypeAppts = appts as (new {tblAppt, tblApptTypes}); // This bit here 
} 

ответ

3

Нет. Анонимные типы ... анонимны. Вы не можете преобразовать переменную в анонимный тип, как вы пытались использовать в своем коде. И желательно, чтобы вы не проходили мимо них другими способами. Их нужно держать внутри. И вы действительно не должны использовать dynamic для этого.

Предлагаю создать «настоящий» тип, который вы можете получить может перейти к другому методу.

+0

Хорошо, я подумал, что это будет единственное решение и просто пытается срезать углы. Кажется, что нет ответа нигде, вероятно, потому, что никто другой не настолько глуп, чтобы попробовать его. Благодарю. – sonnyJim

+1

@sonnyJim Я склоняюсь к тому, что анонимные типы отлично подходят в контексте одного метода, но как только кто-то еще должен заботиться о них, найдите время, чтобы сделать новое определение класса. Но только FYI, учитывая «динамику», вам не нужно отбрасывать его. Вы просто утка-типа членов, чтобы добраться до них, 'dynamic', и DLR делает все остальное. Тем не менее, не делайте этого. –

+0

@AdamHouldsworth Обычно, если я передавал объект более чем одному месту, я бы сделал правильный класс, однако это используется только двумя методами (одним перегруженным методом), поэтому я точно знаю, что происходит, код хорошо документирован чтобы было ясно, что это anon-тип с {a, b, c и т. д.} в нем (я также являюсь сольным разработчиком в данный момент, но это, вероятно, изменится в будущем). Я не делал ничего подобного раньше, и я думаю, что я, вероятно, неправильно его использую, учитывая, что и вы, и Патрик сказали, переписываете его, я сделаю это. Также я знаю, что утиная набивка, для этого нет никакой интеллигентности и т. Д. – sonnyJim

Смежные вопросы