LINQ проверка на наличие дублирующихся объектов (исключая ID) - PullRequest
1 голос
/ 22 июля 2010

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

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

У каждого автомобиля есть несколько полей, например, 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);

1 Ответ

2 голосов
/ 22 июля 2010

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

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

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

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

...