像在循环中查询一样

时间:2012-05-11 10:22:07

标签: c# .net linq predicate

我在一个方法中有一个LINQ,它传递了一个HalfHour个对象数组,每个对象包含一个DateAndTime和一个HalfHourNumber

我需要分别查询每个,然后平均结果。目前我的查询仅适用于第一个元素(我选择元素[1]):

internal static decimal? Average(this IQueryable<LOSSES> query, HalfHour[] array)
{
     var list = query.ToList();

     var numbers = (from q in list
                    where  q.DAY == array[1].DateAndTime.Date
                    select q).Select(x => Calculations.SingleElement(x, 
                    array[1].HalfHourNumber));

     return numbers.Average();

}

如何防止需要在循环中多次执行此操作(多次调用查询),同时保持对象属性正确关联?

1 个答案:

答案 0 :(得分:1)

要获取与LOSSES

列表一起使用的平均值列表
var averages = list.Select(
    q => array.Where(hh => q.DAY == hh.DateAndTime.Date)
              .Select(hh => Calculations.SingleElement(q, hh.HalfHourNumber)
              .Average()).ToList();

或者,将每个LOSSES与字典中的平均值相关联(如果LOSSES支持将其用作键):

var averages = list.ToDictionary(
    q => q,
    q => array.Where(hh => q.DAY == hh.DateAndTime.Date)
              .Select(hh => Calculations.SingleElement(q, hh.HalfHourNumber)
              .Average()
);