2017-03-26 4 views
-2

最後の12文字が一意でなければならない最新の10個の固有レコードを取得したい。 サンプルデータlinqクエリで一意の値を取得する方法

JSONデータ

[{ "タイムスタンプ": "2017-03-20T05:27:01.688Z"、 "データフレーム": "ACnrAAAAAAAAAAA ="、 "FCNT" 165、 "ポート" :3、 "rssi": - 85、 "snr":7、 "sf_used":12、 "id":1489987621688、 "decrypted":true}、{"タイムスタンプ": "2017-03-20T05:27:41.675 16、 "ポート":3、 "rssi": - 85、 "snr":9、 "sf_used":12、 "id":1489987661675、 ""、 "dataFrame"、 "fcnt"

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

このように出力されますが、最後の12文字が同じであるため1つにする必要があります。

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); 

モデル

+0

を使用している場合、明確な()関数を使用する必要はありませんか? – CodingYoshi

+0

私はdataframeの一意の値が欲しいです。最後の12文字は一意である必要があります。 1つのデータフレームには、2つの値が一意でなければならないという点で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()

1
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; } 
     } 

使用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

関連する問題