Проверка LINQ на наличие повторяющихся объектов (за исключением ID)

Я использую LINQ to SQL (SQL Server) с С#.

У меня есть таблица под названием «Автомобили», которая автоматически становится классом/объектом LINQ под названием «Автомобиль». Все хорошо и хорошо.

У каждого автомобиля есть ряд полей, например CarID(первичный ключ int), EngineID, ColourID.

У меня есть 10 существующих строк в таблице Cars.

Используя все классные возможности LINQ, я создаю новый объект Car на C# с перегруженным конструктором, созданным в частичном классе Car. Так, например:

Car MyCar = new Car(17, 5);

Теперь это прекрасно дает мне ссылку на новый объект Car, который я, конечно, еще не зафиксировал в базе данных.

Каков самый LINQ-подкованный/последний способ запустить быструю проверку, чтобы убедиться, что не существует других автомобилей с такими же значениями EngineID и ColourID (мне все равно, имеют ли они другой CarID - я просто хочу сравнить другое значение столбцы и убедитесь, что я больше не создаю и не вставляю автомобили с той же комбинацией двигателя/цвета).

Есть ли классный способ добиться этого очень быстро, например:

return db.Cars.Equals(x => MyCar);

person Aaron    schedule 22.07.2010    source источник


Ответы (1)


Вы можете использовать .Distinct с IEqualityComparer

var distinctcars = from Repo.cars.Distinct(new MyComparer());

Хороший пример IEqualityComparer находится здесь — http://msdn.microsoft.com/en-us/library/bb338049.aspx

Если вы посмотрите пример ProductComparer, все, что вам, вероятно, потребуется сделать, это заменить часть «Проверить, равны ли свойства продуктов» на проверку, которую вы хотите сделать, и это почти все.

person Frank Tzanabetis    schedule 22.07.2010
comment
Спасибо, Фрэнк, это направило меня в правильном направлении и заставило его работать хорошо. В итоге я сделал следующее: bool DuplicateSearchesFound = ThisGuysSearchesList.Contains(NewSearch, new SearchComparer()); - person Aaron; 26.07.2010