2

コレクションオブジェクトからアイテムを削除/スキップするための最良の方法は何ですか

List<Person> personList = new List<Person>()
personList  = dao.GetData(123);
personList = personList.Select(x => x.Comment... ????

結果セット:

"GCE"   
Not available 
""               //comments
"RES" 
9.97000000 
9.99000000 

........
........
........

だから、私は「コメント」と呼ばれるフィールドをターゲットにしていて、コメントが空の場合はレンダリングしないでください。

foreachループでそれを行うこともできますがif condition、ベストプラクティスを探しています

4

6 に答える 6

9

問題のあるアイテムをリストから破壊的に削除する場合は、メソッドRemoveAll(Predicate<T>)を使用します。述語に一致するすべてのアイテムをリストから削除します。

myList.RemoveAll(x=>x.Comment == whatever);

リストを同じに保ち、フィルタリングされたアイテムのシーケンスを作成する場合は、次を使用しますWhere

foreach(Item item in myList.Where(x=>x.Comment != whatever))
    ...

それはリストを同じに保ちます。フィルタが適用されているリストの「ビュー」が表示されWhereます。

于 2012-04-17T19:13:19.013 に答える
6

あなたはWhere次のように使うことができます...

foreach (var a in personList.where(x => !string.IsNullOrWhitespace(x.Comment))
{
   // code
}
于 2012-04-17T19:08:37.923 に答える
1

これにより、リストがnullおよび空白以外の文字列を持つコメントに制限されます。

List<Person> personList = dao.GetData(123); 
filteredList = personList.Where(x => !String.IsNullOrWhitespace(x.Comment));
于 2012-04-17T19:09:16.673 に答える
1

LINQを使用して、コレクションを使用する前にコレクションをフィルター処理できます。手始めに、これは一種の冗長です:

List<Person> personList = new List<Person>()
personList  = dao.GetData(123);
personList = personList.Select(x => x.Comment... ????

あなたが探しているのはこれのように聞こえます:

var personList = dao.GetData(123)
                    .Where(p => !string.IsNullOrWhitespace(p.Comment))
                    .Select(p => ...

次に、のアイテムをループできますpersonList

もちろん、振り返ってみると、必要がない場合.Select()(つまり、フィルタリングの試み以外のことをしていない場合)、これはより簡単です。

var personList = dao.GetData(123)
                    .Where(p => !string.IsNullOrWhitespace(p.Comment))
于 2012-04-17T19:10:25.370 に答える
1

気になる拡張機能は2つあります。

Where

var subset = collection.Where(x => x != someValue);

このメソッドは、単にすべての要素を取得し、それに述語を適用して、一致する要素のみを生成します。

そしてSkipSkipWhile

var skipFirstThreeItems = collection.Skip(3);
var skippedItems = collection.SkipWhile(x => x != "SomeValue")

2番目の要素との重要な違いは、述語が一致するまで値をスキップし、その後、後続のすべての要素を取得することです。

于 2012-04-17T19:11:17.283 に答える
0

私はよく議論の余地があると思いますが、コードが何をしているのかを明確にしたいと思います。

var peopleWithComments = dao.GetData(123)
  .Where(person => person.Comment.IsPresent());

...

public static class StringExtensions {
  public bool IsPresent(this string self) {
    return !String.IsNullOrWhitespace(self);
  }
}
于 2012-04-18T03:30:19.657 に答える