Я использовал LINQ для работы с объектом JSON, возвращенным из удаленного веб-сервиса sharepoint.Я опубликовал это, потому что большинство ответов, которые я нашел в Интернете, немного отличалось от того, что мне было нужно.
Список ежедневных действий json возвращается из списка удаленного общего ресурса и затем суммируется с помощью LINQ
* 1004.* Упрощенная версия определения пользовательского объекта показана ниже (& определяется в области моделей приложения MVC)
public class MyCustomObjectList
{
public string eventdate { get; set; }
public string userid { get; set; }
public string action { get; set; }
}
Объект JSON сериализуется в массив MyCustomObjectList.
var customobject = serializer.Deserialize<MyCustomObjectList>(jsonobject);
Я хотел выяснить, сколько действий каждого типа произошло в данный день.Примечание: дата события сохраняется в виде строки в формате гггг-мм-дд чч: мм: сс.Это должно было упростить преобразования между c #, JSON и Jquery (где это необходимо, я создаю объекты DateTime в другом месте кода, используя дату события.
Некоторые утверждают, что это неэффективно, но я предпочитаю разбивать процессы на последовательный набордействительно простые операции, чтобы облегчить отладку и помочь другим людям следить за моим кодом. Вот почему есть два запроса Linq.
querya удаляет компонент времени из даты события. Это гарантирует, что наша последующая группировка произойдет по дням., & не на секунду. Чтобы быть вдвойне уверенным в отсутствии кэширования, я создаю его в новом поле, называемом actionday. Я также переименовываю action в action, потому что intellisense запутался !! Остальные столбцы копируются как есть.
var querya =
from c in customobject.rows
select new { actionday = c.eventdate.Substring(0, 10), activity = c.action, c.userid,
c.eventdate };
/ * queryb создает сгруппированный счетчик querya, сгруппированный по actionday & activity, создающий новые столбцы actionkey, ActionCount, Dte, action & DetailList (который является сводкой для целей отладки) * /
var queryb=
from p in querya group p by new { p.actionday, p.activity} into idGroup
actionkey = idGroup.Key,
ActionCount = idGroup.Count(),
Dte = idGroup.Key.actionday,
action = idGroup.Key.activity,
DetailList = idGroup
};
Вот версия, которая суммируется на 3 столбца
var queryc = from p in querya
group p by new { p.actionday, p.userid, p.activity} into idGroup
select new
{
actionday = idGroup.Key,
ActionCount = idGroup.Count(),
userid = idGroup.Key.userid,
Dte = idGroup.Key.actionday,
action = idGroup.Key.activity,
DetailList = idGroup
};