これはコメントと共にプログラムです。私はListAとListBを持っています。 ListAのIsChecked = trueをListBに設定していればそれを有効にしたいLINQクエリでリスト内の少数のアイテムをチェックしたままにします
foreach (var item in ListB)
{
var listAItem = (from itemA in ListA
where itemA.Title == item.Title
select itemA).First(); //no need for FirstOrDefault() because it is always going to be present
listAItem.IsChecked = true;
}
しかし、これは非常に非効率的になります。
public class SomeClass
{
public bool IsChecked { get; set; }
public string Title { get; set; }
}
List<SomeClass> ListA = new List<SomeClass>
{
new SomeClass { IsChecked = false, Title = "A" },
new SomeClass { IsChecked = false, Title = "B" },
new SomeClass { IsChecked = false, Title = "C" },
new SomeClass { IsChecked = false, Title = "D" },
new SomeClass { IsChecked = false, Title = "E" },
new SomeClass { IsChecked = false, Title = "F" },
};
List<SomeClass> ListB = new List<SomeClass>
{
new SomeClass { Title = "A" },
new SomeClass { Title = "D" },
new SomeClass { Title = "F" },
};
// some linq query at the end of which listA's Item containing Title = "A","D","F" will become true
foreach (var item in ListA)
{
Console.WriteLine(item.Title + " " + item.IsChecked);
}
Console.ReadKey();
これは私が思い付いたものです:これは、プログラムです。 Linqを使ってこれを行う良い方法はありますか?私はLINQのソリューションだけを望んでいます。事前に
感謝:)
+1。私はあなたの解決策が好きだった。 BrokenGlassが提供しているIntersectソリューションはどうでしょうか?それも参照を作成しますか?何か案が? – TCM
@Anthony:あなたの型が適切な等価実装を持っていた場合、または適切な 'IEqualityComparer'を提供した場合、 'Intersect'はうまく動作します。しかし、読者にとっては少し混乱するので、ここではIntersectが本当に好きではありません。いずれかのリストの一致する項目がすべての可能な意味で「等しい」場合は、通常は「交差」を使用します。しかし、あなたは結果がどのリストから来るべきかを非常に気にしています...(その方法に関する文書はあいまいではありませんが、それにもかかわらず不思議です)。 –
Ani