LINQ: использовать .Except() для коллекций разных типов, делая их конвертируемыми/сопоставимыми?

Имея два списка разных типов, можно ли сделать эти типы конвертируемыми или сопоставимыми друг с другом (например, с помощью TypeConverter или подобного), чтобы запрос LINQ мог сравнивать их? Я видел другие подобные вопросы на SO, но ничего не указывает на то, чтобы сделать типы конвертируемыми между собой для решения проблемы.

Типы коллекций:

public class Data
{
    public int ID { get; set; }
}

public class ViewModel
{
    private Data _data;

    public ViewModel(Data data)
    {
        _data = data;
    }
}

Желаемое использование:

    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);

        // ...
    }

Казалось бы логичным, поскольку я знаю, как сравнивать экземпляр ViewModel с экземпляром Data, я должен иметь возможность предоставить некоторую логику сравнения, которую LINQ затем использовал бы для запросы типа .Except(). Это возможно?

6
задан James Cadd 3 April 2012 в 17:43
поделиться