0

UnitGroup: の IEnumerable コレクションがありますIEnumerable<UnitGroup>

class UnitGroup
    {      
        string key { get; set; }              
        List<UnitType> NameList { get; set; }
    }
class UnitType
    {               
        String UnitName{ get; set; }
        Description { get; set; }
    }

IEnumerable<UnitGroup>ここで、UnitType の UnitName に基づいてフィルター処理したいと考えています。

たとえば、文字列を含む UnitName のレコードのみを取得し、残りを削除したいとします。

このようなもの:

IEnumerable<UnitGroup> Groups;
IEnumerable<UnitGroup> filteredResult = Groups.NameList(o => o.UnitName.contains("test"));

そして、IEnumerable<UnitGroup>UnitGroup の下の UnitType の下でフィルター処理された UnitNames のみを取得します。

これを達成する最善の方法は何ですか?

4

3 に答える 3

2

あなたが何を達成しようとしているのか、100%わかりません。より明確にするために、いくつかのサンプルデータを提供できますか?

しかし、私はそれがあなたの目標に合うかもしれないと思います:

IEnumerable<UnitGroup> Groups;
var filteredResult = Groups.Select(g => new UnitGroup {
                                            key = g.key,
                                            NameList = g.NameList
                                                        .Where(n => n.UnitName == "test")
                                                        .ToList()
                                        })
                           .Where(g => g.NameList.Count > 0);
于 2013-03-11T20:17:06.553 に答える
1

@MarcinJuraszekの回答が行うことを行う別の方法を次に示します。(質問の意図も推測しています。)

IEnumerable<UnitGroup> Groups;
var filteredResult = Groups.Where (g => g.NameList.Count() > g.NameList.RemoveAll(nl => nl.UnitName != "Name1"));

削除されたアイテムの数が元の数より少ない場合は、関心のあるアイテムがあるため、親を選択します。

注: これにより元のコレクションが変更されるため、複数回フィルタリングする必要がある場合、これは探している答えではありません。

于 2013-03-11T20:54:50.187 に答える
0

これを試して:

  var filteredList = from g in Groups 
                     where g.NameList.Exists(i=>i.UnitName=="test")
                     select g;
于 2013-03-11T20:19:46.607 に答える