У меня есть интересный вопрос: у меня возникли трудности в поиске ответа.CRUD над двумя различными коллекциями POCOs
У меня есть две IEnumerable коллекции объектов. Основные объекты полностью разделены, НО я могу определить общий ключ, который должен совпадать. Коллекции важны тем, что мой «левый» объект является «системой записи», а «правый» объект представляет собой систему, которую я должен обеспечить, чтобы соответствовать системе записи.
Как только они совпадают, мне нужно выполнить операции CRUD с одной стороны, чтобы привести правую сторону в линию с левой стороной. Например, он создавал бы новый элемент с правой стороны, если бы он не существовал или не обновлял значения или не удалялся, если элемент отсутствовал слева, но не был прав.
Уловка, у меня есть сотни этих коллекций, чтобы соответствовать, и фактический код CRUD отличается.
Я хотел бы ввести некоторый общий код, в котором я могу проходить в обеих коллекциях, типы коллекций (как, вероятно, generics), какой-то сравнитель и некоторые делегаты какой операции выполнять для CRUD.
Если этот код на самом деле существует, это может выглядеть примерно так
class Stuff
{
string Id {get; set;}
string Name {get; set;}
}
class Junk
{
string Id {get; set;}
string ShortName {get; set;}
}
IEnumerable<Stuff> myStuff = GetStuff();
IEnumerable<Junk> myJunk = GetJunk();
CrudComparer cc = new CrudComparer<Stuff, Junk>(myStuff, myJunk);
cc.Comparer = (leftObject, rightObject) => {
leftObject.Name == rightObject.Name
}
cc.CreateOperation = (newObject, rightCollection) => {
Junk j = new Junk();
j.Shortname = newObject.Name;
rightCollection.Add(j);
}
cc.UpdateOperation = (leftObject, rightObject) => {
rightObject.Shortname = leftObject.Name;
}
cc.DeleteOperation = (rightCollection, rightObject) => {
rightCollection.Remove(rightObject);
}
cc.Compare();
Кто-нибудь когда-нибудь видел код, который делает что-то вроде этого? Мне бы не хотелось изобретать колесо, если я могу схватить что-то уже сделанное.
Спасибо за помощь! --Michael
Может хочет поставить этот вопрос на http://programmers.stackexchange.com/ –
@roryap когда речь идет о других сайтах, часто бывает полезно указать, что [кросс-постинг неодобрения] (HTTP://meta.stackexchange.com/tags/cross-posting/info) – gnat
@gnat - отметил, спасибо. –