下面的代码给出了一个超出范围异常的参数。我试图用ElementAt()exension方法获取当前索引的某些项目。我在这里缺少什么:
var orders = cart.GroupBy(x => x.ClientForOrdersId).Select
((x, i) =>
new Client_InvoiceBalance()
{
IsMainClient = x.Key == x.ElementAt(i).MainClientId ? true : false,
MainClientId = x.ElementAt(i).MainClientId,
OtherClientId = x.ElementAt(i).ClientForOrdersId,
InvoiceOrderNumber = orderNumber,
IsPaidInFull = false
}).ToList();
答案 0 :(得分:7)
GroupBy(...).Select((x,i)=>
中的索引是所有组中组的索引,而不是组中项目的索引。
考虑购物车中有50件商品,GroupBy
根据ClientForOrdersId
创建10个不同的商品。然后索引从0开始,以9结束。所以你不能在ElementAt
中使用它,因为每个组的大小只有5,你得到ArgumentOutOfRangeException
。
我假设您要创建List<Client_IncvoiceBalance>
作为结果。除了ElementAt
之外,您完全不需要SelectMany
。
List<Client_IncvoiceBalance> balances = cart
.GroupBy(x => x.ClientForOrdersId)
.SelectMany((g, iGroup) => // iGroup is the index of the group
g.Select((x, iItem) => // iItem is the index of each item in the group
new Client_InvoiceBalance()
{
IsMainClient = g.Key == x.MainClientId,
MainClientId = x.MainClientId,
OtherClientId = x.ClientForOrdersId,
InvoiceOrderNumber = orderNumber,
IsPaidInFull = false
}
)).ToList();