Проверьте, вставил ли я уже определенную запись - PullRequest
2 голосов
/ 05 февраля 2010

Я просматриваю огромный список бизнес-объектов и вставляю их в базу данных, используя Linq-to-Sql.

Некоторые бизнес-объекты содержат запись о способе оплаты (чеки, кредитная карта и т. Д.)

Когда дело доходит до добавления способа оплаты, я хочу проверить, чтобы убедиться, что я его еще не добавил, потому что в противном случае он будет раздражать меня, когда я приду, чтобы отправить свои изменения.

if ( !context.PaymentMethods.Any ( paymentMethod => paymentMethod.PaymentMethodID == iPaymentMethod.PaymentMethodID ) )
{
    PaymentMethod method = new PaymentMethod ();
    method.PaymentMethodID = iPaymentMethod.PaymentMethodID;

    // etc...

    context.PaymentMethods.InsertOnSubmit ( method );
 }

Это не работает, я полагаю, потому что Any проверяет базу данных, а не список объектов, которые я собираюсь вставить при Submit.

Я знаю, что могу поддерживать свой собственный список, чтобы проверить, были ли записи уже добавлены, но чтобы сэкономить массу хлопот, мне просто было интересно, есть ли у Linq способ сделать это? Любой способ проверить context.PaymentMethods, чтобы увидеть, был ли он добавлен?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2010

Возможным решением будет проверка ChangeSet контекста:

Func<PaymentMethod,bool> f = 
     paymentMethod => paymentMethod.PaymentMethodID == iPaymentMethod.PaymentMethodID;

if (!context.PaymentMethods.Any(f) && 
    !context.GetChangeSet().Inserts.OfType<PaymentMethod>().Any(f))
{
   // Submit
}
0 голосов
/ 05 февраля 2010

Попробуйте это:

!context.PaymentMethods.Where(paymentMethod => paymentMethod.PaymentMethodID == iPaymentMethod.PaymentMethodID).Count() = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...