C# 在Linq中添加项目索引号
我有一个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 =
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.IQueryable1[Pos.Models.ConsolidatedOrder]选择[ConsolidatedOrder,ConsolidatedOrder](System.LINQ.IQueryable
1[Pos.Models.ConsolidatedOrder],System.LINQ.Expressions.Expression1[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.IQueryable1[Pos.Models.ConsolidatedOrder]选择[ConsolidatedOrder,ConsolidatedOrder](System.LINQ.IQueryable
1[Pos.Models.ConsolidatedOrder],System.LINQ.Expressions.Expression1[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(学习和)编码:)