LINQ-to-SQL: преобразование Func в выражение >

LINQ-to-SQL был для меня PITA. Мы используем его для связи с базой данных, а затем отправляем сущности через WCF в приложение Silverlight. Все работало нормально, пока не пришло время начать редактирование (CUD) сущностей и связанных с ними данных.

Я наконец смог изобрести два цикла for, которые позволили использовать CUD. Я попытался реорганизовать их, и я был так близок, пока не узнал, что я не всегда могу использовать Lambda с L2S.

public static void CudOperation<T>(this DataContext ctx, IEnumerable<T> oldCollection, IEnumerable<T> newCollection, Func<T, T, bool> predicate)
    where T : class
{
    foreach (var old in oldCollection)
    {
        if (!newCollection.Any(o => predicate(old, o)))
        {
            ctx.GetTable<T>().DeleteAllOnSubmit(ctx.GetTable<T>().Where(o => predicate(old, o)));
        }
    }

    foreach (var newItem in newCollection)
    {
        var existingItem = oldCollection.SingleOrDefault(o => predicate(o, newItem));
        if (existingItem != null)
        {
            ctx.GetTable<T>().Attach(newItem, existingItem);
        }
        else
        {
            ctx.GetTable<T>().InsertOnSubmit(newItem);
        }
    }
}

Вызвано:

ctx.CudOperation<MyEntity>(myVar.MyEntities, newHeader.MyEntities,
    (x, y) => x.PkID == y.PkID && x.Fk1ID == y.Fk1ID && x.Fk2ID == y.FK2ID);

Это почти сработало. Однако мой Func должен быть выражением>, и вот где я застрял.

Кто-нибудь может сказать мне, возможно ли это? Мы должны быть в .NET 3.5 из-за SharePoint 2010.

6
задан DaleyKD 17 February 2012 в 00:38
поделиться