你可以很容易地編寫自己的擴展方法:
public static IEnumerable<IEnumerable<T>> FindSequences<T>(this IEnumerable<T> sequence, Predicate<T> selector, int size)
{
List<T> curSequence = new List<T>();
foreach (T item in sequence)
{
// Check if this item matches the condition
if (selector(item))
{
// It does, so store it
curSequence.Add(item);
// Check if the list size has met the desired size
if (curSequence.Count == size)
{
// It did, so yield that list, and reset
yield return curSequence;
curSequence = new List<T>();
}
}
else
{
// No match, so reset the list
curSequence = new List<T>();
}
}
}
現在你可以說:
var groupsOfFive = entities.OrderBy(x => x.ApplicationTime)
.FindSequences(x => x.ThicknessMicrons == null, 5);
注意這將返回長度5.您的所有子序列可以測試像這樣的存在:
bool isFiveSubsequence = groupsOfFive.Any();
另一個重要的注意事項是,如果您有9個連續匹配,則只會找到一個子序列。
不錯的工作。我會盡快嘗試。 – Hosea146