ボトムライン以下のコードと同じリストを返すlinq文が必要です。リストからのリストのフィルタリング
私はこれが可能なように感じています。私があきらめる前に、私は非常に近くにいるように感じて、より多くのコード行で欲しいものを綴っています。
私は未来のために達成しようとしていることを示すことができ、私が持っているものを置き換えることができる誰もが大変感謝しています。
public ObservableCollection<VarItem> IndexChannels
{
get
{
ObservableCollection<VarItem> filtered = new ObservableCollection<VarItem>();
filtered.Add(indexChannels.First());//add Disabled no matter what
//add the cur channels selected index if it isn't already disabled
if (!filtered.Contains(indexChannels.FirstOrDefault(i => i == CurChannel.IndexChannel)))
{
filtered.Add(indexChannels.FirstOrDefault(i => i == CurChannel.IndexChannel));
}
foreach (PdioChannelModel ch in channels)
{
//if the channels mode isn't q-decode or quad index add its Number as an index
if (ch.Mode.Value != "Q-Decode" && ch.Mode.Value != "Quad Index")
{
filtered.Add(indexChannels.FirstOrDefault(i => i.ID == ch.Number));
}
}
return filtered;
}
}
VarItem
の基本的な構造パブリッククラスVarItem { 公共int型のID {取得します。プライベートセット; } 公開ストリング値{get;プライベートセット; } public Dictionary MetaData {get;}プライベートセット; }
public VarItem(int id, string value)
{
this.ID = id;
this.Value = value;
MetaData = new Dictionary<string, string>();
}
例マスターリストVarItems含ま:
-1、
1 "無効"、 "チャンネル1"
2、 "チャンネル2"
3、 "チャネル3"
フィルタリストには常にVarItem(-1, Disabled)
が含まれている必要があります。また、VarItem
どこID
試合CurChannel.IndexChannel
が含まれている必要がありますし、最後にそれは私が私に知らせて必要なすべての詳細を逃した場合はIDがPdioChannelModel.Mode.Value != "Q-Decode" or "Quad Index"
任意のPdioChannelModel.Number
に一致するVarItem
Sが含まれていsould。私があなたを混乱させ、多くの人に書いたり、明確化が必要な場合は、私にも知らせてください。
あなたは、LINQの単一ビットをすべてそのコードを交換したり、foreachのビットをjsutしようとしています:ここで
は例のソリューションです3つの異なるもの(デフォルト、現在のもの、フィルタされたもの)はおそらく、それらのものを分離しておくことがより読みやすいことを意味します。 foreachはおそらくかなり簡単に 'filtered.AddRange'に変更することができ、Whereはあなたが望むものならSelectを続けますが、やはり"壊れていなければ修正しない "という傾向になります。もちろん、次回の学習の練習としても役立ちます... :) – Chrisいくつかの質問があります。 「チャンネル」はどこから来たのですか? 'indexChannels'と同じ型ですか? 'IndexChannels'(大文字I)はtypoですか? 'indexChannels.First()'は常に "Disabled"の項目になっていますか?私はこれがフィルタリングとソートによって達成できると思います。 –