Использование Linq, пытаясь выбрать все записи, не в моем локальном наборе не удается:Использование Linq для выполнения CRUD на SETS: как?
var localset = new List<Category>();
localset.Add(new Category { pk1 = 1, pk2 = 1, name = "one" });
localset.Add(new Category { pk1 = 1, pk2 = 2, name = "two" });
var dbCategories = dc.Categories;
var diff = dbCategories.Except(localset);
мне нужно сделать основной CRUD: удалить из набора БД, когда не в моем локальном наборе, обновление, где существует, и добавить новый когда нет.
я обычно делаю:
delete from Category C where not exists
(select null from LocalSet L where C.pk1 = L.pk1 and C.pk2 = L.pk2)
update Category set name = L.name
from LocalSet L
where L.pk1 = Category.pk1 and L.pk2 = Category.pk2
insert into Category (pk1, pk2, name)
select pk1, pk2, name
from LocalSet L
where not exists (
select null from Category C where L.pk1 = C.pk1 and L.pk2 = C.pk2)
достаточно просто подумал я. Тем не менее .Contains, кажется, единственный метод, который работает с локальными наборами, и это только кажется, сравнивает одно поле. Таблица базы данных содержит составные ключи.
Без изменения составных клавиш, есть ли способ выполнить эти задачи?