2014-10-16 52 views
0

我正在使用實體框架4從數據庫中檢索數據,然後將其顯示在WPF DataGrid中的應用程序。我檢索數據是這樣的:LINQ查詢 - 動態PIvot日期

SCHEMATIC_ID SERIAL_NUM OUTAGE_DATE POSITION COMMENTS 
1G1111G111G1 1199  4/17/2003 10   Filler 
1G1111G111G1 1199  5/21/2004 10   Filler 
1G1111G111G2 1962  4/17/2003 3   Filler 
1G1111G111G2 1962  5/21/2004 3   Filler 
1G1111G111G1 2017  5/21/2004 9   Filler 
1G1111G111G1 226   5/21/2004 8 
1G1111G111G1 290   5/21/2004 6 
1G1111G111G1 291   5/21/2004 5 
1G1111G111G1 295   5/21/2004 1 
1G1111G111G1 65450  5/21/2004 3 
1G1111G111G1 65451  5/21/2004 9   Filler 
1G1111G111G1 65453  5/21/2004 6   Filler 
1G1111G111G1 65458  4/17/2003 6 
1G1111G111G1 65458  5/21/2004 6 
1G1111G111G1 65459  5/21/2004 7 

我需要讓日期變成一個動態的列標題(我不知道日期會有數)和下位置下降到透視數據每個SN /原理圖的日期。它應該是這樣的:

SCHEMATIC_ID SERIAL_NUM 4/17/2003 5/21/2004 COMMENTS 
1G1111G111G1 1199  10   10   Filler 
1G1111G111G2 1962  3   3   Filler 
1G1111G111G1 2017     9   Filler 
1G1111G111G1 226      8 
1G1111G111G1 290      6 
1G1111G111G1 291      5 
1G1111G111G1 295      1 
1G1111G111G1 65450     3 
1G1111G111G1 65451     9   Filler 
1G1111G111G1 65453     6   Filler 
1G1111G111G1 65458  6   6 
1G1111G111G1 65459     7 

我發現在微軟論壇this link但我一直不成功,因爲我真的不明白select語句的內部拉姆達。

這是我一直在從

var query = (from p in context.PARTS_STAGING 
       where p.TN == SelectedTN 
       group p by new { p.PART_SERIAL_NUM, p.PART_SCH_NUM, p.COMMENTS } into g 
       select new PartStaging() 
       { 
        SerialNumber = g.Key.PART_SERIAL_NUM, 
        SchNumber = g.Key.PART_SCH_NUM, 
        Position = g.GroupBy(f => f.OUTAGE_DATE).Select(m => new { ?? }) // <- This is the part I can't get to work 
        Comments = g.Key.COMMENTS 
       }); 

工作的任何幫助,一定會理解的。

回答

0

從您的數據地圖開始SCHEMATIC_ID SERIAL_NUM OUTAGE_DATE位置評論。 假設你有這些東西的集合。蘭巴與LINQ集成,因此它支付投入訓練的時間,但真正的快速這裏一些樣品在考慮

using (var db = new mydatabaseentities()){ 
    var stuff = db.Database.SqlQuery<theTypeAbove>("Select * from table where...", SQLParms); 
    var filtered = stuff.Where(p=>p.SCHEMATIC_ID < 1000).Select(p=>p.OUTAGE_DATE_POSITION).ToList(); 
    var filtered2 = stuff.Where(p=>p.SERIAL_NUM = 12345); 
    var filtered3 = stuff.Where(p=>COMMENTS.Length>100); 
} 

//IF you were able to get complete maps from EF and tables have good relations you could do this: 

using (var db= new mydatabaseentitite()){ 
    var stuff = db.MyTable.Where(p=>p.SCHEMATIC_ID==99); 

} 

是scheama在第一個例子就說明了如何發出原始的SQL查詢有時是必要的,但不將結果投影到由EF生成的實體類型中。過濾示例顯示如何只選擇一個字段。雖然Filtered2示例顯示瞭如何根據where標準選擇所有字段。 Filtered3顯示瞭如何使用字符串函數來過濾數據庫中的數據。最後,第二個例子展示瞭如何在EF中「完全不使用原始的sql,而只使用LINQ」。

蘭巴達斯只是說實質上在這裏做而不是在那裏的方法。它們建立在迭代器的概念之上,所以你不必設置foreach循環。 LINQ有很多支持Lambdas的方法,因此LINQ本身在黃金方面是值得的。這使得學習Lamdas爲您的生產帶來高利潤。