加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 返回类型不正确,但我不明白应该是什么

发布时间:2020-12-15 23:32:14 所属栏目:百科 来源:网络整理
导读:我正在尝试重做此方法以仅返回相应的记录.下面的原始GetAll()返回了许多不必要的列和数据,因为正在使用EF代理.关闭EF代理会破坏应用程序中的内容,因此我尝试有选择地减少返回的数据以提高性能. 原始GetAll() public IEnumerableOWF_ManagerRelationship GetA
我正在尝试重做此方法以仅返回相应的记录.下面的原始GetAll()返回了许多不必要的列和数据,因为正在使用EF代理.关闭EF代理会破坏应用程序中的内容,因此我尝试有选择地减少返回的数据以提高性能.

原始GetAll()

public IEnumerable<OWF_ManagerRelationship> GetAll()
    {
    return context.OWF_ManagerRelationship.Where(x => x.IsActive == true).ToList();
    }

我正在尝试创建的新GetAll()如下所示.这个将包含来自注释掉的Include()语句中的OWF_Onsites表的一些字段.这些将是几个日期字段和一个整数字段.这是我试图减少从此方法返回到调用方法的数据量的地方.我想从Owf_ManagerRelationship上下文返回一个DisplayName字段,从OWF_Onsites表返回另一个3(OnsiteDate,TargetDate,TargetMonth).

public IEnumerable<string> GetAll()
    {
        var managers = context.OWF_ManagerRelationship
            .Where(m => m.IsActive.Value == true)
            //.Include(o => o.OWF_Onsites).Where()
            .Select(x => new {x.DisplayName})
            .ToList();

        return managers;         
    }

上面的回归经理有红色的曲线.它说“无法将表达式类型System.Collections.Generic.List< DisplayName:string>转换为返回类型System.Collections.Generic.IEnumerable< string>”.

我明白它不能将匿名类型字符串DisplayName转换为返回类型字符串,但我真的不明白为什么.我认为它会起作用,因为DisplayName是一个字符串.一旦我在Include()语句中运行代码,我也不明白返回类型应该是什么.一旦完成,它还应该从OWF_Onsites返回两个日期字段和一个整数字段.

有人可以对这应该是什么样子有所了解吗?包含一些代码以及如何使用Include()中OWF_Onsites表中的两个日期字段(targetDate和OnsiteDate)和整数(TargetMonth)字段将非常有用.

希望我的意图是明确的,以防我尝试这样做是偏离基础的.如果我做错了,请告诉我.

解决方法

您正在尝试返回IEnumerable的匿名类型而不是IEnumerable< string>.删除选择中的新内容,它将起作用:

public IEnumerable<string> GetAll()
{
    var managers = context.OWF_ManagerRelationship
        .Where(m => m.IsActive.Value == true)
        .Select(x => x.DisplayName)
        .ToList();

    return managers;         
}

其他一些值得注意的事项:
您也可以通过省略.ToList()来简化代码,因为.Select已经返回并且IEnumerable< string>.请注意,由于延迟执行,您仍需要稍后枚举查询(例如使用ToList)来获取结果.

public IEnumerable<string> GetAll()
{
    var managers = context.OWF_ManagerRelationship
        .Where(m => m.IsActive.Value == true)
        .Select(x => x.DisplayName);

    return managers;         
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读