Farklı türde iki liste verildiğinde, bu türlerin birbiriyle karşılaştırılabilir veya birbirine benzetilebilir hale getirilmesi mümkün olabilir (örneğin bir TypeConverter veya benzeri), böylece bir LINQ sorgusu bunları karşılaştırabilir mi? SO ile ilgili başka benzer sorular gördüm, ama problemi çözmek için birbirleri arasında dönüştürülebilir türler yapmaya işaret eden hiçbir şey yok.LINQ: Farklı türlerdeki koleksiyonlarda .Except(), dönüştürülebilir/karşılaştırılabilir hale getirerek kullanın.
Koleksiyon Türleri:
public class Data
{
public int ID { get; set; }
}
public class ViewModel
{
private Data _data;
public ViewModel(Data data)
{
_data = data;
}
}
İstenilen kullanımı: Ben Verilerin bir örneğine ViewModel bir örneğini karşılaştırmak için biliyorum çünkü ben sağlayabilmelidir gerektiğini mantıklı görünecektir
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);
// ...
}
LINQ'un .Except() gibi sorgular için kullanacağı bazı karşılaştırma mantığı. Mümkün mü?
Zavallı eski 'for' döngü, o bir zamanlar çok kullanışlıdır, ama alas, o asla bir-liner insanı mutlu etmez. – Marc
@Marc: Açıkladığınız duygu ile aynı fikirde değilim. Artık mekanizma hakkında endişe duymadan niyetleri daha net ifade eden kod yazmanın yolları var. “için” mekanizmaları ifade eder ve niyetleri belirler. LINQ-tabanlı tek-astarlılar, genellikle (evet, her zaman değil) daha iyi ifade etmek niyet ve gizlemek mekanizmaları. Bu, anlaşılması ve bakımı daha kolay olan bir kod ortaya çıkarır. – jason
@Jason, flippant iken, sizin gibi bir projeksiyona attığınız herhangi bir işlev, yalnızca bir niyet varsayımı sağlar. – Marc