我有一个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。我觉得这会有点矫枉过正。
有什么建议吗?
答案 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()
}