C# 如何在linq查询中获取唯一值

C# 如何在linq查询中获取唯一值,c#,entity-framework,linq,C#,Entity Framework,Linq,我想得到最新的10个唯一的记录,其最后12个字符应该是唯一的。 样本数据 json数据 [{“时间戳”:“2017-03-20T05:27:01.688Z”,“数据帧”:“ACNRAAAAAAAA=”,“fcnt”:165,“端口”:3,“rssi”:-85,“snr”:7,“sf_使用的”:12,“id”:1489987621688,“解密的”:true},{“时间戳”:“2017-03-20T05:27:41.675Z”,“数据帧”:“ACNRAAAAAAAA=”,“fcnt”:169,“端

我想得到最新的10个唯一的记录,其最后12个字符应该是唯一的。 样本数据

json数据

[{“时间戳”:“2017-03-20T05:27:01.688Z”,“数据帧”:“ACNRAAAAAAAA=”,“fcnt”:165,“端口”:3,“rssi”:-85,“snr”:7,“sf_使用的”:12,“id”:1489987621688,“解密的”:true},{“时间戳”:“2017-03-20T05:27:41.675Z”,“数据帧”:“ACNRAAAAAAAA=”,“fcnt”:169,“端口”:3,“rssi”:-85,“snr”:9,“sf_使用的”:12,“id”:1489987665,“解密的”:true}

得到这样的输出,但它应该只有一个,因为最后12个字符是相同的

AGMDAQo1/wSsCPU=,
AGMEAQo1/wSsCPU=,
AGMFAQo1/wSsCPU=
期望输出

AGMDAQo1/wSsCPU=
ASHAAQo2FgSsBxc=
代码

使用
Distinct()

Newtonsoft.Json.JsonConvert.DeserializeObject(responseString);
var items=Pirs.Where(a=>!a.dataFrame.EndsWith(“aaaaaaaaaa=”)
.GroupBy(a=>a.dataFrame)
.Select(g=>g.First())
.Distinct()
.OrderByDescending(a=>a.timestamp)
.采取(10);

希望能有所帮助!

您可以在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);
var Pirs=Newtonsoft.Json.JsonConvert.DeserializeObject(responseString);
var items=Pirs.Where(a=>!a.dataFrame.EndsWith(“aaaaaaaaaa=”)
.GroupBy(a=>a.dataFrame.Substring(a.dataFrame.Length-12))
.Select(g=>g.First())
.OrderByDescending(a=>a.timestamp)
.采取(10);

如果使用的是GroupBy(),则无需使用Distinct()函数

什么不起作用?我希望数据框中的值是唯一的。最后12个字符应该是唯一的。在一个数据框中,我有3个值,其中2个值应该是唯一的。这2个值在最后12个字符中。我明白了这一部分,但我想问你的查询有什么问题:你不喜欢的返回值是什么?我已经用我的答案更新了我的问题我得到的输出。请参阅@granit answer。它应该可以解决问题。从某种意义上说,我需要的最后12个字符在数据框架中应该是唯一的。不需要使用distinct,因为结果已分组,因此它们已经是不同的。
 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; }
        }
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);
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);