A linq
查詢Where
子句可將func
應用於原始集合中的項目,並返回bool
以包含或不包含基於項目特徵的項目。好東東:Linq查詢結果中項目之間存在某種期望關係
var q = myColl.Where(o => o.EffectiveDate = LastThursday);
但是,如果我想找到一組項目,其中每個項目都以某種方式與最後一個項目相關?像:
var q = myColl.Where(o => o.EffectiveDate = thePreviousItem.ExpirationDate);
你怎麼做一個Where
(或其他linq
功能)當前項目的「跳出去」?
這是我嘗試過的,試圖變得聰明。我做每一個項目的陣列,這樣我可以使用Aggregate
功能:
public IQueryable<T> CurrentVersions
{
get => AllVersions
.Select(vo => new T[] { vo })
.Aggregate((voa1, voa2) => voa1[0].BusinessExpirationDate.Value == voa2[0].BusinessEffectiveDate.Value ? voa1.Concat(voa2).ToArray() : voa1)
.SelectMany(vo => vo);
}
但是,這並不對SelectMany
編譯:
類型參數的方法
Enumerable.SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>)
不能從推斷用法。嘗試明確指定類型參數 。
EDIT(液)
事實證明,我是正確的軌道上,但只是無所適從SelectMany
一樣。我不需要它。我還需要將IQueryable
更改爲IEnumerable
,因爲我使用的是EF,並且在放開DbContext
後無法查詢。所以,這裏是實際的解決方案。
public IEnumerable<T> CurrentVersions
{
get => AllVersions
.Select(vo => new T[] { vo })
.Aggregate((voa1, voa2) => voa1[0].BusinessExpirationDate.Value == voa2[0].BusinessEffectiveDate.Value ? voa1.Concat(voa2).ToArray() : voa1);
}
謝謝!我想過拉鍊和跳過,但直到你看到它,你不能想象它打出來。當這個集合被減少到這個函數時,它只有幾行數據。所以低效率不會有太大影響。 – toddmo
> Install-Package「System.ValueTuple」-IncludePrerelease – toddmo
您也可以使用匿名對象代替元組。 –