2017-03-26 2 views
-2

최근 12 개의 고유 한 레코드가 필요합니다. 샘플 데이터linq 쿼리에서 고유 한 값을 얻는 방법

JSON 데이터

[{ "타임 스탬프": "2017-03-20T05 : 27 : 01.688Z", "dataFrame": "ACnrAAAAAAAAAAA =" "FCNT"165 "포트" : 3, "rssi": - 85, "snr": 7, "sf_used": 12, "id": 1489987621688, "decrypted": true}, { "timestamp": "2017-03-20T05 : 27 : 41.675 16, "port": 3, "rssi": - 85, "snr": 9, "sf_used": 12, "id": 1489987661675, "데이터 프레임" 복호화 된 ": true}, ..

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 문자는 고유해야합니다. 하나의 데이터 프레임에서 나는 2 개의 값이 유일해야한다는 점에서 3 개의 값을가집니다. 이 2 개의 값은 마지막 12 자입니다. –

+0

나는 그 부분을 얻지 만 귀하의 질문에 무엇이 잘못되었는지 질문하고 있습니다 : 당신이 싫어하는 것은 무엇입니까? – CodingYoshi

답변

1

GroupBy 기능 내에 a.dataFrame.Substring(a.dataFrame.Length - 12)을 사용하여 해당 12자를 dataFrame 속성의 끝에 동일한 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

사용 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

관련 문제