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

时间:2015-06-22 13:41:10

标签: c# linq

stop_ids = [stop.stop_id for stop in stops]
for stop_id in stop_ids:
    if prefix in stop_id:
        pass

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

2 个答案:

答案 0 :(得分:0)

x是IQueryable<T>,其中T是具有ClientIDReviewIDDepartmentIDDepartmentName和{{1}的匿名类型方法。

在某些时候,您需要Amountselect new DepartmentBreakdownReport(…)select new DepartmentBreakdownReport{…}.Select(something => new DepartmentBreakdownReport(…))。 (这些都是真的。

然后,它会为您提供.Select(something => new DepartmentBreakdownReport{…}),因为它选择的类型为IQueryable<DepartmentBreakdownReport>

另请注意,代码中的代码DepartmentBreakdownReport等有效地无效;它会创建一个新查询,但之后永远不会使用或甚至触摸新查询。

答案 1 :(得分:0)

我之前的评论意味着您要创建(并返回)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() ...