2017-07-29 58 views
0

我有一個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語句的內部,這樣它返回一個沒有從1

開始我知道我可以使用foreach然後添加斯諾foreach語句裏面。我有點覺得這會是一種矯枉過正。

有什麼建議嗎?

回答

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

+0

非常感謝您的幫助。試試這會拋出一個錯誤「LINQ to Entities does not recognized the method'System.Linq.IQueryable'1 [Pos.Models.ConsolidatedOrder] Select [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]])'method',並且此方法不能轉換爲存儲表達式。 「 –

+0

@Benjohn - 在'.Select((item,index)....'之前加上'AsEnumerable''' –

+0

@Benjohn這是你的錯,因爲你沒有指定你在你的問題中使用EF(或LINQ to Entities) 。 –

0

你正試圖做一些不同的事情。但無論如何,這是解決方案。

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