Ist es bei zwei Listen verschiedener Typen möglich, diese Typen konvertierbar oder miteinander vergleichbar zu machen (z. B. mit einem TypeConverter oder ähnlichem), damit eine LINQ-Abfrage sie vergleichen kann? Ich habe andere ähnliche Fragen zu SO gesehen, aber nichts, was darauf hindeutet, dass die Typen untereinander umwandelbar sind, um das Problem zu lösen. TypenLINQ: Verwenden Sie .Except() für Sammlungen unterschiedlicher Typen, indem Sie sie konvertierbar/vergleichbar machen?
Collection:
public class Data
{
public int ID { get; set; }
}
public class ViewModel
{
private Data _data;
public ViewModel(Data data)
{
_data = data;
}
}
Wunsch Nutzung:
public void DoMerge(ObservableCollection<ViewModel> destination, IEnumerable<Data> data)
{
// 1. Find items in data that don't already exist in destination
var newData = destination.Except(data);
// ...
}
Es wäre logisch, dass, da ich weiß, wie eine Instanz von Viewmodel zu einer Instanz von Daten zu vergleichen, soll ich in der Lage sein zu liefern eine Vergleichslogik, die LINQ dann für Abfragen wie .Except() verwenden würde. Ist das möglich?
Schlechte alte 'For'-Schleife, er war einmal so nützlich, aber leider macht er die One-Liner-Leute nie glücklich. – Marc
@Marc: Ich stimme nicht mit der Stimmung, die Sie ausdrücken. Wir haben jetzt Möglichkeiten, Code zu schreiben, der die Absicht deutlicher zum Ausdruck bringt, ohne sich Gedanken über den Mechanismus machen zu müssen. 'for' drückt Mechanismen aus und verdeckt die Absicht. Die LINQ-basierten Einzeiler, die Sie häufig (ja, nicht immer) entschlüsseln, drücken Absicht und verbergen Mechanismen. Dies führt zu Code, der einfacher zu verstehen und zu pflegen ist. – jason
@Jason, während ich leichtfertig war, sind alle Funktionen, die Sie in eine Projektion wie Sie werfen, nur eine Annahme der Absicht. – Marc