0

私はlinqを使用していますが、linqコード内から作業中のコレクションを参照する方法があるかどうか疑問に思っていますか?私が探しているのは次のようなものです。

let result = (from t in someCollection 
              where t == something
              select t).Where(res => res.start == THIS.Min(temp => temp.start))

したがって、このクエリで達成したいのは、THIS変数が、where句が適用されているコレクションへの参照を提供する必要があるということです。

(from t in someCollection 
              where t == something
              select t)

この問題を回避する方法はたくさんありますが、使用中のコレクションへの参照を使用する方法に特に興味があります。あなたの何人かがこれについて何か知っていることを願っています!

ありがとう!

4

1 に答える 1

1

あなたの例が述べていることを行う方法は次のようになります:

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番目の例の問題は、アクセスするすべてのアイテムがsomeCollectionminValueの再計算を強制されることです。

これは、コレクションの各メンバーにアクセスしながらコレクション全体にアクセスする必要があることを示す、完全に考案された例です。単にアイテムのリストを調べて、日付の短い他のすべてのアイテムと一緒に各アイテムを出力します。

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つは、正確な問題を解決するのに役立ちます。

于 2012-08-08T19:00:12.310 に答える