无法隐式转换类型';System.Linq.IQueryable<;匿名类型#1>';到';S

本文关键字:类型 lt gt System 转换 Linq IQueryable | 更新日期: 2023-09-27 17:59:02

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有关。我尝试返回是可查询的,但没有成功。如何使我的对账单返回x?

无法隐式转换类型';System.Linq.IQueryable<;匿名类型#1>';到';S

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

在某个时刻,您需要执行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()。。。