をIEnumerableを処理し、サブエンティティから不一致の項目を削除するLINQ私は最近、私の仕事で問題が発生している、、以下のソースコード
this.NameList = new ObservableCollection<Name>();
List<Others> others1 = new List<Others>();
others1.Add(new Others() { Company = "Company1", School = "School1" });
others1.Add(new Others() { Company = "Company1", School = "School1" });
others1.Add(new Others() { Company = "Company1", School = "School1" });
List<Others> others2 = new List<Others>();
others2.Add(new Others() { Company = "Company2", School = "School2" });
others2.Add(new Others() { Company = "Company2", School = "School2" });
others2.Add(new Others() { Company = "Company2", School = "School2" });
List<Others> others3 = new List<Others>();
others3.Add(new Others() { Company = "Company3", School = "School3" });
others3.Add(new Others() { Company = "Company3", School = "School3" });
others3.Add(new Others() { Company = "Company3", School = "School3" });
this.NameList.Add(new Name() { FirstName = "Jacob", LastName = "Deng", Others = others1 });
this.NameList.Add(new Name() { FirstName = "David", LastName = "Xu", Others = others2 });
this.NameList.Add(new Name() { FirstName = "Helen", LastName = "Liu", Others = others3 });
please click here to see the output of above code
し、次のコードを読んでください、
List<Others> others1 = new List<Others>();
others1.Add(new Others() { Company = "Company1", School = "School1" });
others1.Add(new Others() { Company = "Company1", School = "School1" });
others1.Add(new Others() { Company = "Company1", School = "School1" });
List<Others> others2 = new List<Others>();
List<Others> others3 = new List<Others>();
this.NameList.Add(new Name() { FirstName = "Jacob", LastName = "Deng", Others = others1 });
this.NameList.Add(new Name() { FirstName = "David", LastName = "Xu", Others = others2 });
this.NameList.Add(new Name() { FirstName = "Helen", LastName = "Liu", Others = others3 });
Please click here for the output of the second snippet code
上の2つのスニペットから、2番目のスニペットにother2とother3の項目が含まれていないことがわかります。プレビュー出力から簡単に理解できます。
ここで、LINQを使用してIEnumerableにこのようなケースを処理する方法、LINQを使用して他のエンティティからアイテムを削除する方法について質問します。 other2とother3をnullにしないようにする必要があります(カウントは0にしておきます)。 LINQに加えて、他の解決策はありますか?
私はちょうどいくつかのテストをした私たちは、LINQを使用しない場合は、その後、私たちは私のそれを修正するには、以下のスニペットコードを使用することができます
次を使用しようとしましたが、失敗し、
var others = ((MyVM)DataContext).NameList.Select(n => n.Others.Where(o => o.School == "School1")).ToList();
。
ObservableCollection<Name> nameList = ((MyVM)DataContext).NameList;
foreach(Name n in nameList)
{
List<Others> removeList = new List<Others>();
for(int i=0;i<n.Others.Count;i++)
{
if(n.Others[i].School!="School1")
{
removeList.Add(n.Others[i]);
}
}
foreach(Others other in removeList)
{
n.Others.Remove(other);
}
}
しかし、それは非常に冗長に見える、と私たちはLINQは非常に有用であり、私はそれはLINQで固定することができると考えていることを知っています。誰かがLINQで修正するのを助けてくれることを願っています。
誰かが私を助けることができたら大変感謝します。どうもありがとう。
で他の人がリストを取得するためのコードの下に試すことができます。var他人=((myvmに)のDataContext).NameList.Select(N => n.Others.Select(Oを=>(o.School == "School1")?o: "ここにコードを追加して別のことをする"))。ToList(); – jdweng
ありがとうJdweng、私はちょうど学校がLINQで 'School1'と等しくないそれらのアイテムを削除したい、出力は上記のように2番目のスニペットコードと同じです。私たちを手伝ってくれますか? – Jacob
o.School!= 'School1'のときは、他のエンティティからアイテムを削除します。 – Jacob