私はIEnumerable
リストを持っていIEnumerable<SortElement>
ます。
私はそのプロパティを次のように更新しています:
sorts.Where(a => a.DisplayName.ToLower() == "abc")
.ToList()
.ForEach(sl => sl.DisplayName = "Testing");
ただし、その特定の要素のプロパティは変更されません。
私はIEnumerable
リストを持っていIEnumerable<SortElement>
ます。
私はそのプロパティを次のように更新しています:
sorts.Where(a => a.DisplayName.ToLower() == "abc")
.ToList()
.ForEach(sl => sl.DisplayName = "Testing");
ただし、その特定の要素のプロパティは変更されません。
に変更"ABC"
し"abc"
ます。あなたの条件は決して満たされないでしょう。.ToLower()
に変更することもできます.ToUpper()
。
私はこのようなことをします:
foreach(var e in sorts.Where(a => a.DisplayName.ToLower() == "abc"))
e.DisplayName = "Testing";
コードは実際には 2 つのループを実行するため、それは必要ありません。
LINQ はクエリに適していますが、変更には適していません。
リスト項目は次のように変更できます。
foreach (var item in sorts)
{
if (item.DisplayName.Equals("abc", StringComparison.InvariantCultureIgnoreCase))
{
item.DisplayName = "Testing";
}
}
また
foreach (var item in
sorts.Where(r=> r.DisplayName.Equals("abc", StringComparison.InvariantCultureIgnoreCase)))
{
item.DisplayName = "Testing";
}
大文字と小文字を区別しない比較には、string.Equalsオーバーロードを使用します。
それを行う純粋なLINQの方法が1つありますが、しないでください。LINQ はクエリ用であり、変更用ではありません。SortElement
ラムダに渡される参照型のため、構造体ではなくクラスである場合にのみ機能するはずです。
sorts.Select(r => r.DisplayName.Equals("abc", StringComparison.InvariantCultureIgnoreCase)
? r.DisplayName = "Testing"
: r.DisplayName ).ToList();
上記は、結果を に代入しなくても機能しsorts
ます。しかし、それは避けるべきです。
これは、インプレース更新を使用して達成できます-Select
そしてToList
結合します。
Select
フィルタリングされたリストを目的の値に変更し、遅延ToList
評価のために選択をすぐに評価するために実行します-
sorts.Where(a => a.DisplayName.ToUpper() == "ABC")
.Select(sl => sl.DisplayName = "Testing").ToList();