【问题标题】:object' does not contain a definition for MainTypeCode for dynamic dataobject' 不包含动态数据的 MainTypeCode 定义
【发布时间】:2018-05-28 13:16:56
【问题描述】:

以下查询返回一些用于单元测试的模拟数据。

var colorsList = (IEnumerable<dynamic>)colorsRepository.GetColorsList().Result;

它以动态对象的形式给出结果

我只想获得MainTypeCode 值。但它显示 object' 不包含 MainTypeCode 的定义

colorsList.Select(cl => (dynamic)cl.MainTypeCode);

编辑:

让我知道如何安排虚拟/模拟动态数据来执行查询?

并且colorsRepository.GetColorsList().Result; 正在返回下方。我应该更改模拟数据以运行查询吗?

 public static IEnumerable<dynamic> GetColorsList()
        {
            List<dynamic> colours = new List<dynamic>();
            for (int i = 0; i < 1; i++)
            {
                colours.Add((dynamic)new
                {
                    MainTypeCode = 1,
                    DoorCode = "001"
                });
            }
            return colours.AsEnumerable();
        }

【问题讨论】:

  • 你不应该使用Task.Result。使用await colorsRepository.GetColorsList()colorsRepository.GetColorsList().GetAwaiter().GetResult()
  • 你们能告诉我吗。如何为该查询安排一个虚拟数据?
  • @如何为这个GetColorsList()方法设置模拟数据?
  • 我认为您必须使用反射才能获得动态属性。
  • 如果colorsList 真的是IEnumerable&lt;dynamic&gt; - colorsList.Select(cl =&gt; cl.MainTypeCode) 应该可以正常工作并且不会产生任何编译时错误。

标签: c# linq dynamic


【解决方案1】:

遗憾的是,我有很多时间来阐述更好的答案,但您必须使用反射才能获得动态属性。

如果你事先知道动态属性,你可以尝试做一个类并创建一个带有反射的 Map 方法来获取对象。

【讨论】:

    【解决方案2】:

    我猜,这个问题可能与动态有关。您可以尝试以下方法吗?

    var colorLists = new [] { new {DoorCode = "001", MainTypeCode = 1}, new {DoorCode = "002", MainTypeCode = 2}};
    var mainTypeCodes = colorLists.Select(cl => cl.GetType().GetProperty("MainTypeCode").GetValue(cl, null));
    

    Get value of c# dynamic property via string

    【讨论】:

    • 你的模拟数据应该可以用于这个查询,你能试试吗?
    • 我想为我的查询设置一个模拟数据。我不想更改查询。对不起
    • 啊好吧...所以你要做的是为它创建一个单元测试,而你目前正在模拟colorsRepository,GetColorsList方法?
    • 我不太确定的一个是您如何注入模拟 colorRepository 对象,因为您的模型数据似乎可以被查询(并且您的原始查询也应该有效)。我现在想知道的是 colorRepository.GetColorLists().Result - 建议 GetColorLists() 应该返回一个任务 - 但话又说回来,你不能走那么远来获得异常
    猜你喜欢
    • 2014-09-09
    • 2018-03-30
    • 2016-01-24
    • 2012-09-10
    • 1970-01-01
    • 2015-11-27
    • 2015-09-17
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多