【问题标题】:Casting Object/Dynamic to Anonymous Type将对象/动态转换为匿名类型
【发布时间】:2015-07-17 16:14:59
【问题描述】:

我有一个 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
}

【问题讨论】:

    标签: c# entity-framework dynamic casting anonymous-types


    【解决方案1】:

    没有。匿名类型是……匿名的。您不能将变量转换为匿名类型,就像您在代码中尝试的那样。最好不要通过其他方法传递它们。它们应该放在里面。而且你真的不应该为此使用dynamic

    我建议创建一个您可以传递给另一个方法的“真实”类型。

    【讨论】:

    • 好的,我认为这是唯一的解决方案,只是想偷工减料。其他任何地方似乎都没有答案,可能是因为没有其他人愚蠢到可以尝试它。谢谢。
    • @sonnyJim 我倾向于采用匿名类型在单个方法的上下文中很棒的方法,但是一旦其他人需要关心它们,花点时间定义一个新的类.但仅供参考,给定dynamic,您无需将其退回。您只需简单地键入成员即可找到他们,dynamic,DLR 会完成其余的工作。也就是说,不要这样做。
    • @AdamHouldsworth 通常,如果我将对象传递到多个位置,我会创建一个适当的类,但是,这仅由两种方法(一种重载方法)使用,所以我确切地知道发生了什么on,代码有据可查,清楚地表明它是一个匿名类型,其中包含 {a,b,c,etc} (我现在也是一个单独的开发者,但将来可能会改变)。我以前没有做过这样的事情,我想我可能在滥用它,因为你和帕特里克都说过重写它,我会这样做。我也知道鸭子打字,但没有智能感知等。
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多