繁体   English   中英

无法隐式转换类型&#39;System.Linq.IQueryable <AnonymousType#1> &#39;到&#39;System.Linq.IQueryable &lt;&gt;&#39;

[英]Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<>'

public IQueryable<DepartmentBreakdownReport> GetDepartmentBreakdownByReviewID(int ClientID, int? ReviewID) {
    var x = (from d in camOnlineDb.Details
             join h in camOnlineDb.Headers
             on new { d.ClientID, d.ClaimID }
             equals new { h.ClientID, h.ClaimID }
             where h.ClientID == d.ClientID

             join sd in camOnlineDb.SuppDepts
             on new { a = d.ClientID, b = d.CategoryID ?? 0 }
             equals new { a = sd.ClientID, b = sd.CategoryID }

             join r in camOnlineDb.Reviews
             on new { h.ClientID, h.ReviewID }
             equals new { r.ClientID, r.ReviewID }

             join rp in camOnlineDb.ReviewPeriods
             on new { a = r.ClientID, b = r.ReviewPeriodID ?? 0 }
             equals new { a = rp.ClientID, b = rp.ReviewPeriodID }

             select new {
                 d.ClientID,
                 h.ReviewID,
                 sd.DepartmentID,
                 sd.DepartmentName,
                 d.Amount
             });

    x.GroupBy(r => new { r.DepartmentID, r.ReviewID, r.ClientID })
    .Select(g => new {
        ClientID = g.Key.ClientID,
        ReviewID = g.Key.ReviewID,
        Dept = g.Max(d => d.DepartmentName),
        Amount = g.Sum(d => d.Amount)
    })
    .OrderBy(r => r.Dept)
    .Where(r => r.ReviewID == 37);
    //.Dump();

    return x;

我知道这与返回x有关。 我尝试返回的是asQueryable,但这没有用。 如何获得返回x的声明?

x是一个IQueryable<T> ,其中T是具有ClientIDReviewIDDepartmentIDDepartmentNameAmount方法的匿名类型。

在某个时候,您需要要么select new DepartmentBreakdownReport(…)一个select new DepartmentBreakdownReport(…) ,要么select new DepartmentBreakdownReport(…)一个select new DepartmentBreakdownReport{…}一个.Select(something => new DepartmentBreakdownReport(…))或一个.Select(something => new DepartmentBreakdownReport{…}) (实际上都是一样的东西。

这将为您提供IQueryable<DepartmentBreakdownReport>因为它选择的类型将是DepartmentBreakdownReport

还要注意,代码中的代码x.GroupBy(r => new { r.DepartmentID, r.ReviewID, r.ClientID })等实际上什么也没做; 它会创建一个新查询,但此新查询将永远不会被使用甚至无法使用。

我之前的评论的意思是您要创建(并返回) DepartmentBreakdownReport实例,而不是匿名类型。

return x.Where(r => r.ReviewID == 37)
        .GroupBy(r => new { r.DepartmentID, r.ReviewID, r.ClientID })
        .Select(g => new DepartmentBreakdownReport
                         {
                             ClientID = g.Key.ClientID,
                             ReviewID = g.Key.ReviewID,
                             Dept = g.Max(d => d.DepartmentName),
                             Amount = g.Sum(d => d.Amount)
                         })
        .OrderBy(r => r.Dept);

我将查询重新排序了一下,以符合我的个人喜好,但它应该产生相同的结果。

另外,我不知道您是否必须在其末尾添加一个AsQueryable() ……

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM