Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq中添加项目索引号_C#_Linq - Fatal编程技术网

C# 在Linq中添加项目索引号

C# 在Linq中添加项目索引号,c#,linq,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 =

我有一个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。我觉得这有点过分了


有什么建议吗?

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

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
            };

请注意,我对group by和query语法select做了一些更改-要分组的项现在仅是您需要的
总和

字段,使用该部分的方法语法使用获取项和索引的:

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
            };

请注意,我对group by和查询语法select做了一些更改-要分组的项目现在只是您想要的
总和
字段,您正在尝试做一些不同的事情。但无论如何,这就是解决办法

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

你正在尝试做一些不同的事情。但无论如何,这就是解决办法

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

非常感谢你的帮助。尝试此操作会引发错误“LINQ to Entities无法识别方法System.LINQ.IQueryable
1[Pos.Models.ConsolidatedOrder]选择[ConsolidatedOrder,ConsolidatedOrder](System.LINQ.IQueryable
1[Pos.Models.ConsolidatedOrder],System.LINQ.Expressions.Expression
1[System.Func
3[Pos.Models.ConsolidatedOrder,System.Int32,Pos.Models.ConsolidatedOrder]]),此方法无法转换为存储表达式。“@Benjohn-在
之前添加
AsEnumerable
。选择((项目,索引)…
@Benjohn这是您的错,因为您没有指定将EF(或LINQ)作为实体的目标)在你的问题上。@IvanStoev对不起我的bad@Benjohn没问题。幸运的是,有一种简单的方法可以扩展Gilad所展示的解决方案。但这并不总是可能的。LINQ太广泛了,不同的查询提供程序都有其特定的功能,所以下次不要简单地使用LINQ,而是具体的-EF6、EF Core(版本!)等。Happy(学习和)编码:)非常感谢您的帮助。尝试此操作会引发错误“LINQ to Entities无法识别方法System.LINQ.IQueryable
1[Pos.Models.ConsolidatedOrder]选择[ConsolidatedOrder,ConsolidatedOrder](System.LINQ.IQueryable
1[Pos.Models.ConsolidatedOrder],System.LINQ.Expressions.Expression
1[System.Func
3[Pos.Models.ConsolidatedOrder,System.Int32,Pos.Models.ConsolidatedOrder]]),此方法无法转换为存储表达式。“@Benjohn-在
之前添加
AsEnumerable
。选择((项目,索引)…
@Benjohn这是您的错,因为您没有指定将EF(或LINQ)作为实体的目标)在你的问题上。@IvanStoev对不起我的bad@Benjohn没问题。幸运的是,有一种简单的方法可以扩展Gilad所展示的解决方案。但这并不总是可能的。LINQ太广泛了,不同的查询提供程序都有其特定的功能,所以下次不要简单地使用LINQ,而是具体的-EF6、EF Core(版本!)等。Happy(学习和)编码:)