[英]Grouping Data with LINQ Not Working
我想按字段BillPeriodId
查询表和组,我正在按照本文中的示例的方式实现它。 以下是进行分组的方法
public List<BillPeriodLine> GetLinesGroupedByPeriod()
{
var linesGrouped = _lineRepository.AllIncluding(p => p.BillPeriod)
.GroupBy(pl => pl.BillPeriodId)
.Select(g => new Group<int, BillPeriodLine>
{
Key = g.Key,
Values = g
});
return new List<BillPeriodLine>(linesGrouped);
}
可发现类型
public class Group<T, K>
{
public K Key;
public IEnumerable<T> Values;
}
但它强调了g.Key
并出现以下错误消息:
无法将类型'int'隐式转换为'BillTracker.Entities.BillPeriodLine'
除了我正在使用lamda表达式之外,它正是在示例中完成的方式。 它使用LINQ语句提供相同的错误。 我不知道我做错了什么。 Sompne指向正确的方向吗?
你有错误的T
和K
( 反之亦然 )
new Group<int, BillPeriodLine>
...
public class Group<T, K>
{
public K Key;
public IEnumerable<T> Values;
}
无法将类型'int'隐式转换为'BillTracker.Entities.BillPeriodLine'
信息说得很完美,你试图在一个圆孔中推一个方形钉
虽然Michael Randall对错误消息的回答非常合理,但这只是问题的一部分。
我想你想在某种表格中显示分组的BillPeriodLine
,如你提供的链接所示。 无论如何,你不能简单地返回List<BillPeriodLine>
并假设它被神奇地分组,你也不能从IEnumerable<Group<int, BillPeriodLine>>
创建List<BillPeriodLine>
- 这是linesGrouped
的类型。 大概你要做的是返回List<Group<int, BillPeriod>>
public List<Group<int, BillPeriodLine>> GetLinesGroupedByPeriod()
{
var linesGrouped = _lineRepository.AllIncluding(p => p.BillPeriod)
.GroupBy(pl => pl.BillPeriodId)
.Select(g => new Group<int, BillPeriodLine>
{
Key = g.Key,
Values = g
});
return linesGrouped.ToList();
}
可以从示例中显示的视图中使用此List<Group<int, BillPeriodLine>>
:视图正在迭代List<Group<int, BillPeriodLine>>
。 对于每个Group<int, BillPeriodLine>
它为组创建一个标题,然后遍历Group<int,BillPeriodLine>.Values
所有项目,为每个BillPeriodLine
创建一行。
此外(正如迈克尔所说)你必须交换Group<T,U>
类的类型参数(或者切换你创建Group<int, BillPeriodLine>
,但我更喜欢前者,因为我首先考虑关键是更直观一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.