あなたの例が述べていることを行う方法は次のようになります:
var minValue = someCollection.Min(x => x.start);
var result = from t in someCollection
where t.id > 5 // replace this line with your "where t == something"
where t.start == minValue
select t;
ただし、コレクション内のすべての要素について、他のすべての要素に対して何らかの他の比較を行う必要があるとしましょう。このようなことをする方法はありますか?
本当に1つのアイテムをリスト内の他のすべてのアイテムと比較する必要がある場合は、次のようにコードをパターン化できます。
var result = from t in someCollection
where t.id > 5 // replace this line with your "where t == something"
let minValue = someCollection.Min (x => x.start)
where t.start == minValue
select t;
2番目の例の問題は、アクセスするすべてのアイテムがsomeCollection
minValueの再計算を強制されることです。
これは、コレクションの各メンバーにアクセスしながらコレクション全体にアクセスする必要があることを示す、完全に考案された例です。単にアイテムのリストを調べて、日付の短い他のすべてのアイテムと一緒に各アイテムを出力します。
var eventItems = new[]
{
new { Name = "alpha", DateCreated = DateTime.Today.AddDays(1) },
new { Name = "bravo", DateCreated = DateTime.Today.AddDays(2) },
new { Name = "charlie", DateCreated = DateTime.Today.AddDays(-1) },
new { Name = "delta", DateCreated = DateTime.Today.AddDays(-5) },
new { Name = "echo", DateCreated = DateTime.Today.AddDays(-3) },
new { Name = "foxtrot", DateCreated = DateTime.Today.AddDays(3) },
new { Name = "golf", DateCreated = DateTime.Today.AddDays(-4) }
};
var results = from item in eventItems
where item.Name.Length > 2
let prevDays = eventItems.Where (i => i.DateCreated < item.DateCreated)
select new
{
Name = item.Name,
CurrentDate = item.DateCreated,
PreviousItems = prevDays
};
出力:
おそらく、これらの例の1つは、正確な問題を解決するのに役立ちます。