【问题标题】:cannot convert from IEnumerable<T> to IEnumerable<T>无法从 IEnumerable<T> 转换为 IEnumerable<T>
【发布时间】:2014-11-09 04:42:19
【问题描述】:

我最近一直沉浸在前端编程的世界中,但为了我正在做的一个项目,我又回到了 C#。我正在定义我的一些模型和通用功能,并收到以下错误:

错误 3 参数 2:无法从 'System.Collections.Generic.IEnumerable&lt;T&gt; [c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\mscorlib.dll]' 转换为 'System.Collections.Generic.IEnumerable&lt;T&gt; [c:\ Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\mscorlib.dll]'

错误来自以下函数中的返回语句:

public static PagedResult<T> Create<T, TEntity>(IOrderedQueryable<TEntity> query, PagedRequest pagedRequest, Func<TEntity, T> converter)
        where T : class
    {
        var count = query.Count();

        if (pagedRequest.SortInfo.Fields.Any())
        {
            var firstPass = true;
            foreach (var sortOrder in pagedRequest.SortInfo.Fields)
            {
                if (firstPass)
                {
                    firstPass = false;
                    query = sortOrder.Direction == SortDirection.Ascending
                                ? query.OrderBy(sortOrder.Field) :
                                  query.OrderByDescending(sortOrder.Field);
                }
                else
                {
                    query = sortOrder.Direction == SortDirection.Ascending
                                ? query.ThenBy(sortOrder.Field) :
                                  query.ThenByDescending(sortOrder.Field);
                }
            }
        }

        query = (IOrderedQueryable<TEntity>) query.Skip((pagedRequest.Page - 1) * pagedRequest.PageSize).Take(pagedRequest.PageSize);

        var list = new List<T>();
        foreach (var entity in query)
        {
            list.Add(converter(entity));
        }

        return Create(pagedRequest, list.AsEnumerable(), count);
    }

和创建函数:

static public PagedResult<T> Create(PagedRequest request, IEnumerable<T> data, long totalCount)
    {
        var result = new PagedResult<T> {Status = ResultStatus.Successful, Data = data.ToArray()};

        result.Count = result.Data.Count();
        result.TotalCount = totalCount;

        result.Page.Index = request.Page;
        result.Page.Size = request.PageSize;
        if (result.Page.Size > 0)
        { result.Page.Count = (long)Math.Ceiling((double)totalCount / result.Page.Size); }

        return result;
    }

似乎无法消除编译时错误。有人对如何解决此问题有任何想法吗?

【问题讨论】:

  • 你的Create() 函数应该是通用的。 T 还应该来自哪里?它与另一个 Create() 函数中的 T 不同。
  • 谢谢@JeffMercado。就是这样。
  • 您能否将此解决方案输入为answer,以便我们和其他人可以更轻松地从您的问题中学习?

标签: c# linq generics ienumerable mscorlib


【解决方案1】:

感谢@JeffMercado,解决方案非常简单。

我的第二个 Create 函数的方法签名需要是:

static public PagedResult<T> Create<T>(PagedRequest request, IEnumerable<T> data, long totalCount)

代替:

static public PagedResult<T> Create(PagedRequest request, IEnumerable<T> data, long totalCount)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多