0

私はList、例えば:

    public class User
        {    
            public string Name { get; set;}
            public bool IsShow { get; set;}
        }

    List<User> myList = new List<User>();
    myList.Add(new User(){Name = "FUser", IsShow = true});
    myList.Add(new User(){Name = "FUser2", IsShow = true});
    myList.Add(new User(){Name = "FUser3", IsShow = true});
    myList.Add(new User(){Name = "BUser", IsShow = true});
    myList.Add(new User(){Name = "FUser4", IsShow = true});

リスト内の要素を特定の基準でフィルタリングしてから、Linqでそれらのプロパティを変更するにはどうすればよいですか?

要素をフィルタリングします:

myList.AsEnumerable().Where(u => u.Name.Contains("/" + F + "/");

したがって、、、、およびのプロパティIsShow = trueが必要です。"FUser""FUser2""FUser3""FUser4"IsShow = falseBUser

サイクルなしでLinqで可能ですか?

4

5 に答える 5

3

List<T>'ForEach メソッド (実際には Linq の一部ではありません) はどうですか?

myList.ForEach(u => { u.IsShow = u.Name.Contains("..."); });

Linq は、データの変更ではなく、データのクエリに関するものであることに注意してください。(言語統合クエリ)

于 2013-02-14T13:49:39.783 に答える
2
void Main()
{
    List<User> myList = new List<User>();
    myList.Add(new User(){Name = "FUser", IsShow = true});
    myList.Add(new User(){Name = "FUser2", IsShow = true});
    myList.Add(new User(){Name = "FUser3", IsShow = true});
    myList.Add(new User(){Name = "BUser", IsShow = true});
    myList.Add(new User(){Name = "FUser4", IsShow = true});

    // the magic happens here
    var results = myList.Select(p=> new User { Name = p.Name, IsShow=p.Name.First()=='F'});
}
    public class User
        {    
            public string Name { get; set;}
            public bool IsShow { get; set;}
        }

// Define other methods and classes here
于 2013-02-14T13:54:06.633 に答える
1

リストを作成するときは、コレクション初期化子を使用する必要があります。また、ここで Ienumerable を設定します。

IEnumerable<User> myList = new List<User>
      {
         new User() {Name = "FUser", IsShow = true},
         new User() {Name = "FUser2", IsShow = true},
         new User() {Name = "FUser3", IsShow = true},
         new User() {Name = "BUser", IsShow = true},
         new User() {Name = "FUser4", IsShow = true}
      };

次に、あなたが求めていることを行うには、次のことを行う必要があります。

string parameter = "F";
foreach (var s in myList.Where(s => s.Name.Contains == parameter))
        {
            s.IsShow = true;
        }

また

string parameter = "BUser";
foreach (var s in myList.Where(s => s.Name == parameter))
        {
            s.IsShow = false;
        }
于 2013-02-14T14:04:16.903 に答える
1

サイクルなしでLinqで可能ですか?

この種の質問はよく聞かれます。「サイクルなし」とは、コレクションを列挙しないことです。Linq.Enumerable が魔法のように生成されたインデックスをリストに使用して、リスト全体を見ずに探しているものを見つけることができるようになることは祈りだと思います。残念ながら、そうではありません。Linq.Enumerable はリストに魔法のインデックスを持たず、リストを列挙することで機能します - foreach ループを書くのと同じです。

だから - 質問への答えは「いいえ」です。

于 2013-02-14T13:49:36.430 に答える
1

次のコードを使用して、ソース リストのオブジェクトを実際に変更できます。

List<User> myList = new List<User>();
myList.Add(new User() { Name = "FUser", IsShow = true });
myList.Add(new User() { Name = "FUser2", IsShow = true });
myList.Add(new User() { Name = "FUser3", IsShow = true });
myList.Add(new User() { Name = "BUser", IsShow = true });
myList.Add(new User() { Name = "FUser4", IsShow = true });

myList
    .Where(user => user.Name.StartsWith("F"))
    .Select(user => 
    { 
        user.IsShow = true; 
        return user; 
    });

これにより、foreach ステートメントを使用して結果リストをループするときに、余分な「サイクル」を節約できます。

于 2013-02-14T14:53:36.990 に答える