0

タイトルは泥のようにはっきりしていると確信しているので、例を投げて、誰かが私を正しい方向に向けることができるかどうかを見てみましょう。

public class topObj
{
    public List<midObj> Mids { get; set; }
    public List<botObj> Bots { get { // do some LINQ magic here } }
}
public class midObj
{
    public List<botObj> Bots { get; set; }
}
public class botObj
{
}

したがって、一番上のオブジェクトから、一番上のオブジェクトからリスト<>にある中間オブジェクトのいずれかのリスト<>にあるすべての一番下のオブジェクトのリストを取得しようとしています。

今私はこのようなものを持っています:

public List<botObj> Bots
    {
        get
        {
            List<botObj> lst = new List<botObj>();
            foreach (midObj mo in Mids)
            {
                lst.AddRange(mo.Bots);
            }

            return lst;
        }
    }

もちろん機能しますが、LINQがこれをより少ない行で実行する方法があると想定する必要があります。

4

2 に答える 2

3
 get { return Mids.SelectMany(mid => mid.Bots).ToList(); }

また、少なくともIEnumerable<botObj>a ではなく単に返すことを検討Listします。これにより、本当に必要な場合にのみ、すべてを評価してリストに入れる労力を費やすことができます。ただし、リストを使用して何をしているのかわかっている場合は、このコメントを無視してかまいません。

于 2012-05-02T16:50:47.127 に答える
0

次のようにする必要があります。

get{ Mids.SelectMany(x => x.Bots).ToList(); }

それが役に立てば幸い!

于 2012-05-02T16:55:01.640 に答える