在Linq中添加项目索引号

时间:2017-07-29 08:23:20

标签: c# linq

我有一个linq查询,它为我加入并分组两个表以获得所需的结果。

var data = (from a in cData.OrderDetails
            join b in cData.ItemMaster on a.OrderItemId equals b.ItemID
            group a by new
            {
                itemid = a.OrderItemId,
                itemname = b.ItemName
            }
            into g
            select new ConsolidatedOrder
            {
                Sno=//
                ItemName = g.Key.itemname,
                ItemQty = Convert.ToInt16(g.Sum(x => x.OrderQty))
            });

我还需要在select语句中添加一个Sno,使其从1开始返回no。

我知道我可以使用foreach然后在foreach语句中添加Sno。我觉得这会有点矫枉过正。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

使用该部分的方法语法,使用同时获取项目和索引的Select overload

var data = (from a in cData.OrderDetails
            join b in cData.ItemMaster on a.OrderItemId equals b.ItemID
            group a.OrderQty by new { a.OrderItemId, b.ItemName } into g
            select new {
                ItemName = g.Key.ItemName,
                ItemQty = Convert.ToInt16(g.Sum())
            }).Select((item,index) => new ConsolidatedOrder {
                Sno = index,
                ItemName = item.ItemName,
                ItemQty = item.ItemQty
            };

请注意,我已经更改了分组依据和查询语法选择 - 要分组的项目现在只是您希望Sum

的字段

答案 1 :(得分:0)

你正在尝试做一些不同的事情。但无论如何这里是解决方案。

int seNO = 1;
var data = (from a in cData.OrderDetails
....
....
select new ConsolidatedOrder
                    {
                        Sno=seNO++.ToString()
}