无法隐式转换类型';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?
x是一个IQueryable<T>
,其中T
是具有ClientID
、ReviewID
、DepartmentID
、DepartmentName
和Amount
方法的匿名类型。
在某个时刻,您需要执行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()
。。。