在列表中查找唯一参数的总和-LINQ

时间:2018-12-05 06:21:43

标签: c# linq

我有行列表,行包含呼叫列表(呼叫具有DestinationNumber属性)

这是我的线模型

 public class Line
{
    public Line()
    {
        Calls = new List<Call>();
        Messages = new List<Sms>();
        Payments = new List<Payment>();
    }
    public int LineId { get; set; }

    public int CustomerId { get; set; }
    public Customer Customer { get; set; }

    public Package Package { get; set; }

    public ICollection<Call> Calls { get; set; }
    public ICollection<Sms> Messages { get; set; }
    public ICollection<Payment> Payments { get; set; }

    public string LineNumber { get; set; }
    public LineStatus Status { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime? CreatedDate { get; set; }
    [DataType(DataType.DateTime)]
    public DateTime? RemovedDate { get; set; }
}

这是我的通话模型

 public class Call
{
    public int CallId { get; set; }

    public int LineId { get; set; }
    public Line Line { get; set; }

    public DateTime DateOfCall { get; set; }
    public int Duration { get; set; }
    public string DestinationNumber { get; set; }
}

我想对唯一通话次数进行计数(

我尝试过类似的事情。

Lines.Sum(line=>line.Calls.Sum(call=>call.DestinationNumber.Where(/*if DestiantionNumber not counted before*/))

2 个答案:

答案 0 :(得分:2)

GroupBy方法是按DestinationNumber挑选仅存在一次的所有呼叫x.Count() == 1并对其进行计数Count()

int result = line.Calls.GroupBy(x => x.DestinationNumber).Count(x => x.Count() == 1);

答案 1 :(得分:1)

我认为类似的方法应该起作用:

var count = lines.SelectedMany(l => l.Calls)
     .Select(c => c.DestinationNumber)
     .Distinct()
     .Count();