其他分享
首页 > 其他分享> > CodeGo.net>如何获取列表(加上铸造)的字段的值?

CodeGo.net>如何获取列表(加上铸造)的字段的值?

作者:互联网

我有这个代码.最终,我们获得了带有字段FILE_NAME,DATE,REPORT_LINK的匿名对象列表.

public ServiceResult Get(string userIdString)
{
    var userId = Int32.Parse(userIdString);
    var downloadLink = _serviceConfigManager.Parameters[ServiceResources.DownloadService].FirstOrDefault();
    var query = SharedUnitOfWork.Context.ReportRequest
        .Where(item => item.IS_DELETED == 0
                    && item.TENANT_ID == TenantId
                    && item.REPORT_STATE_ID == 2
                    && item.CREATED_BY_USER_ID == userId)
        .OrderByDescending(item => item.ID)
        .Take(10)
        .ToList()
        .Select(item => new
            {
                FILE_NAME = item.FILENAME,
                DATE = item.CREATION_DATE,
                REPORT_LINK = string.Format("{0}/{1}", downloadLink, item.ID)
            }
        );
    return new ServiceResult<object>(query.ToList());
}

首先,如您所见,我们返回ServiceResult< object>宾语.
第二,函数的返回类型是ServiceResult(NOT GENERIC).
我没有写这段代码,所以我无法更改此方法的源代码.

任务:
在我的单元测试中,我需要获取返回的对象并检查它是否填充了正确的数据.
我以函数Get返回2条记录的方式编写了测试.
所以,我需要检查此记录中的每个字段.怎么做?

在我的测试中,我从serviceResult名称的此函数变量获取.
如何“解包” serviceResult,使其看起来像List< of_something>并且我可以检查List< of_something> [0] .FILE_NAME,List< of_something> [1] .FILE_NAME等?

serviceResult的Result字段等于query.ToList().

致主持人:我阅读了所有提供的类似主题,但没有一个主题描述了我的任务,因为我无法重写Get函数的源代码.

解决方法:

您无法掌握匿名类型.您的选择是:

>使用反射(GetType().GetProperty()等)读取数据
>使用动态

后者可能更方便:

foreach(dynamic obj in listOfAnonObjects) {
    string filename = obj.FILE_NAME;
    DateTime date = obj.DATE;
    string link = obj.REPORT_LINK;

    // TODO: now use filename, date and link
}

您可以使用上述方法将数据投影到具有良好广告属性的自己的列表类型中.

标签:unit-testing,casting,anonymous-types,mstest,c
来源: https://codeday.me/bug/20191025/1927469.html