【发布时间】:2020-12-19 15:23:03
【问题描述】:
我正在尝试查询 Json 对象列表,我需要找到重复的键并返回每个键的最新日期的对象。到目前为止,我设法返回了对象,但如果它只是一个键。这就是我现在得到的:
List<JObject> list = new List<JObject>();
List<JObject> duplist = new List<JObject>();
JObject rss = new JObject(new JProperty("id_lokalid", "12312"),
new JProperty("unitdescription", "registrationFrom"),
new JProperty("registrationFrom", "2019-01-21T11:56:37.753899+01:00"));
JObject rss1 = new JObject(new JProperty("id_lokalid", "123"),
new JProperty("unitdescription", "registrationFrom"),
new JProperty("registrationFrom", "2019-02-21T11:56:37.753899+01:00"));
JObject rss2 = new JObject(new JProperty("id_lokalid", "123"),
new JProperty("unitdescription", "regs"),
new JProperty("registrationFrom", "2019-02-22T11:56:37.753899+01:00"));
JObject rss3 = new JObject(new JProperty("id_lokalid", "12312"),
new JProperty("unitdescription", "regs"),
new JProperty("registrationFrom", "2019-03-22T11:56:37.753899+01:00"));
list.Add(rss);
list.Add(rss1);
list.Add(rss2);
list.Add(rss3);
var duplicateKeys = list.GroupBy(x => x["id_lokalid"])
.Where(group => group.Count() > 1)
.Select(group => group.Key).ToList();
Console.WriteLine(duplicateKeys.Count());
foreach (var obj in list)
{
if (duplicateKeys.Contains(obj["id_lokalid"]))
{
duplist.Add(obj);
}
}
foreach (var d in duplicateKeys)
{
foreach (var ob in duplist)
{
if (ob["id_lokalid"] == d)
{
var latestobj = ob;
Console.WriteLine("This is the latest object" + latestobj.ToString());
var registrationFrom = DateTime.Parse((string)latestobj["registrationFrom"], null, System.Globalization.DateTimeStyles.RoundtripKind);
var NextOfIs = duplist.SkipWhile(x => x != latestobj).Skip(1).DefaultIfEmpty(duplist[0]).FirstOrDefault();
Console.WriteLine("This is the next object" + NextOfIs);
var date = DateTime.Parse((string)NextOfIs["registrationFrom"], null, System.Globalization.DateTimeStyles.RoundtripKind);
if (date > registrationFrom)
{
latestobj = NextOfIs;
}
}
}
Console.WriteLine(latestobj.ToString());
这就是它返回的结果
{
"id_lokalid": "123",
"unitdescription": "regs",
"registrationFrom": "2019-02-22T11:56:37.753899+01:00"
}
【问题讨论】:
-
var duplicateKeys = list.GroupBy(x => x["id_lokalid"]) .Where(group => group.Count() > 1) .OrderByDescending(x => x["registrationFrom" ]) .Select(x => x.First()) .ToList();
标签: c# json list linq json.net