2017-03-26 38 views
-2

我想獲取最新的10個唯一記錄,其最後12個字符應該是唯一的。 樣本數據如何在linq查詢中獲取唯一值

JSON數據

[{ 「時間戳」: 「2017-03-20T05:27:01.688Z」, 「數據幀」: 「ACnrAAAAAAAAAAA =」, 「FCNT」:165, 「端口」 :3, 「RSSI」: - 85, 「SNR」:7, 「sf_used」:12, 「ID」:1489987621688, 「解密」:真},{ 「時間戳」:「2017-03-20T05:27:41.675 Z 「 」數據幀「: 」ACntAAAAAAAAAAA =「, 」FCNT「:169, 」端口「:3 」RSSI「: - 85, 」SNR「:9 」sf_used「:12, 」ID「:1489987661675」解密「:真},..

AGMDAQo1/wSsCPU= 
AGMEAQo1/wSsCPU= 
AGMFAQo1/wSsCPU= 
AGMGAQo1/wSsCPU= 
AGMHAQo1/wSsCPU= 
ASHAAQo2FgSsBxc= 

得到這樣的輸出,但它應該只有一個,因爲最後12個字符是相同的。

AGMDAQo1/wSsCPU=, 
AGMEAQo1/wSsCPU=, 
AGMFAQo1/wSsCPU= 

期望的輸出

AGMDAQo1/wSsCPU= 
ASHAAQo2FgSsBxc= 

代碼

var Pirs = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AssetDetail>>(responseString); 
        var items = Pirs.Where(a => !a.dataFrame.EndsWith("AAAAAAAAAAA=")) 
              .GroupBy(a => a.dataFrame) 
              .Select(g => g.First()) 
              .OrderByDescending(a => a.timestamp) 
              .Take(10); 

模型

public class AssetDetail 
     { 
      public long id { get; set; } 
      public DateTime timestamp { get; set; } 
      public string dataFrame { get; set; } 
      public long fcnt { get; set; } 
      public int port { get; set; } 
      public int rssi { get; set; } 
      public string snr { get; set; } 
      public string sf_used { get; set; } 
      public bool decrypted { get; set; } 
     } 
+0

什麼是不工作? – CodingYoshi

+0

我想要在數據框中的唯一值。最後12個字符應該是唯一的。在一個數據框中,我有3個值,其中2個值應該是唯一的。這兩個值是最後12個字符。 –

+0

我得到那部分,但我問你的查詢有什麼問題:你不喜歡什麼回報? – CodingYoshi

回答

1

您可以在GroupBy函數內部使用a.dataFrame.Substring(a.dataFrame.Length - 12),通過在其dataFrame屬性末尾具有相同12個字符的AssetDetails進行分組。

var Pirs = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AssetDetail>>(responseString); 
var items = Pirs.Where(a => !a.dataFrame.EndsWith("AAAAAAAAAAA=")) 
           .GroupBy(a => a.dataFrame.Substring(a.dataFrame.Length - 12)) 
           .Select(g => g.First()) 
           .OrderByDescending(a => a.timestamp) 
           .Take(10); 

沒有必要,如果你正在使用的GroupBy到使用DISTINCT()()函數

1

使用Distinct()

Newtonsoft.Json.JsonConvert.DeserializeObject<List<AssetDetail>>(responseString); 
        var items = Pirs.Where(a => !a.dataFrame.EndsWith("AAAAAAAAAAA=")) 
              .GroupBy(a => a.dataFrame) 
              .Select(g => g.First()) 
              .Distinct() 
              .OrderByDescending(a => a.timestamp) 
              .Take(10); 

希望它有幫助!

+0

截然不同,我需要最後12個字符在數據框中應該是唯一的 –

+0

沒有獨特的不需要,因爲結果已經分組,因此它們已經不同了。 – CodingYoshi