所以我在尝试构建查询时遇到了一些噩梦,即使它确实不应该那么困难。
我有一个类visitItem
public class visitItem
{
public int visitId {get; set;}
public int contactId {get; set;}
public int locationId {get; set;}
public DateTime FirstSeen {get; set;}
public DateTime LastSeen {get; set;}
public double Duration {get; set;}
}
基本上我在json中访问历史记录日期,我将其反序列化为visitItem
列表,并从数据中形成几个不同的图表。
我想要做的是从我选择特定月份的主列表中创建一个新列表,结果列表现在按contactId分组,持续时间总和:
List<visitItem> totalDurations = visits
.Where(x => x.FirstSeen.ToString("MM") == month)......
这样就可以选择相关的月份数据,然后我希望列表如下:
contactId duration
1 10
2 5
3 5
4 20
而不是:
contactId duration
1 5
1 5
2 5
3 5
4 10
4 10
我怎样才能做到这一点?
答案 0 :(得分:1)
您需要按月过滤,然后按联系人ID对项目进行分组,然后将这些组的持续时间相加。例如,对于May:
var month = 5;
var durationByContact = from visit in visits
where visit.FirstSeen.Month == month
group visit by visit.contactId
into visitsByContact
select new
{
ContactId = visitsByContact.Key,
TotalDuration = visitsByContact.Sum(i => i.Duration)
};
或者在方法语法中:
var durationByContact = visits
.Where(v => v.FirstSeen.Month == month)
.GroupBy(v => v.contactId)
.Select(g => new
{
ContactId = g.Key,
TotalDuration = g.Sum(i => i.Duration)
});