我需要幫助 我有表:LINQ的GROUP BY,ORDER BY值
Id Day Group Value
-------------------------------------------------
1 2016-10-11 1 10.5
2 2016-10-11 1 10.8
3 2016-10-11 1 10.7
4 2016-10-11 1 10.6
5 2016-10-11 1 10.5
6 2016-10-11 1 10.4
7 2016-10-11 1 10.8
8 2016-10-11 1 10.2
9 2016-10-11 1 10.0
10 2016-10-11 1 10.9
11 2016-10-11 2 10.1
12 2016-10-11 2 10.0
13 2016-10-11 2 10.1
14 2016-10-11 2 10.6
15 2016-10-11 2 10.7
16 2016-10-11 2 10.2
17 2016-10-11 2 10.0
18 2016-10-11 2 10.5
19 2016-10-11 2 10.5
20 2016-10-11 2 10.8
21 2016-10-12 1 11.1
22 2016-10-12 1 11.7
23 2016-10-12 1 11.0
24 2016-10-12 1 11.4
25 2016-10-12 1 11.7
26 2016-10-12 1 11.8
27 2016-10-12 1 11.1
28 2016-10-12 1 11.1
29 2016-10-12 1 11.4
30 2016-10-12 1 11.6
31 2016-10-12 2 11.9
32 2016-10-12 2 11.6
...
而且我想
- 爲了通過價值
- 逐組由 日
- 組
- 並且獲得類似的價值:
[[[10.5,10.8],[10.0,10.1]],[[11.1,11.7],[11.6,11.9]]]
(例如)
分別我需要這個值更多的工作,當我得到價值像例子中,我獲得日更多的價值。然後我將這批分成4批,然後我從每組中選擇第一個值。因此,我將爲每個組設置4個值,並且爲1天,我將有2個批次,每個批次將有4個值。而且因爲我需要每個批次中有最後一個值等5個值,所以我找到最大值並將其添加到具有4個值的批次中。我不知道你明白所以我的代碼:
更新:
這項工作:
var result = db.Values
.Where(x => (DbFunctions.TruncateTime(x.Day)) >= startDate
&& (DbFunctions.TruncateTime(x.Day)) <= endDate)
.GroupBy(x => new { Day = x.Day, Group = x.Group })
.Select(x => x.Select(y => y.Value).OrderBy(z => z).ToList()).ToList();
我得到這個:
[
[10.0, 10.2, 10.4, 10.5, 10.5, 10.6, 10.7, 10.8, 10.8, 10.9],
[10.0, 10.0, 10.1, 10.1, 10.2, 10.5, 10.5, 10.6, 10.7, 10.8],
[11.0, 11.1, 11.1, 11.1, 11.4, 11.4, 11.6, 11.7, 11.7, 11.8],
[...]
]
但我在這種情況下需要對每個批次進行拆分2部分,並從該部分中選擇第一個值。因此,我將有2個值,然後我想從這個批次CONCAT 2值最高值,因此在這個例子中我的最終結果將是:
[
[10.0, 10.6, 10.9],
[10.0, 10.2, 10.8],
[11.0, 11.4, 11.8],
[...]
]
分裂我用這個方法:
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int length)
{
if (length <= 0)
throw new ArgumentOutOfRangeException("length");
var section = new List<T>(length);
foreach (var item in source)
{
section.Add(item);
if (section.Count == length)
{
yield return section.AsReadOnly();
section = new List<T>(length);
}
}
if (section.Count > 0)
yield return section.AsReadOnly();
}
所以要Concat的一些值,其將按照羣組失去了發言。這裏是一個關於通過linq連接這些值的問題:[link](http://stackoverflow.com/questions/18203169/field-concatenation-based-on-group-in-linq)。所以你可以根據需要多次使用組,然後連接數值。之後,您可以訂購結果數據。 – Jenism