последовательность содержит более одного элемента - PullRequest
1 голос
/ 13 октября 2009

Я получаю следующее сообщение об ошибке «последовательность содержит более одного элемента» при попытке заполнить мой объект таблицы повышения. Я знаю, что получаю эту ошибку, потому что мой запрос возвращает несколько значений, как и должно быть. Может ли кто-нибудь указать мне в правильном направлении, как удалить несколько записей, кроме циклов (если это возможно с EF).

основной процесс:

    TBLPROMOTIONCOLLECTION promotionCollectionInfo = null;
using (webStoreEntities webStoreContext = new webStoreEntities())
{
  promotionCollectionInfo = WebStoreDelegates.selectPromotionCollection.Invoke    (webStoreContext).ByPromoID(promotionId).ToList().SingleOrDefault();

  if (promotionCollectionInfo != null)
  {
     webStoreContext.DeleteObject(promotionCollectionInfo);
     webStoreContext.SaveChanges();
  }
}

selectPromotionCollection Делегат:

        public static Func<webStoreEntities, IQueryable<TBLPROMOTIONCOLLECTION>> selectPromotionCollection =
    CompiledQuery.Compile<webStoreEntities, IQueryable<TBLPROMOTIONCOLLECTION>>(
        (promotion) => from c in promotion.TBLPROMOTIONCOLLECTION
                       select c);

Фильтр ByPromoID:

        public static IQueryable<TBLPROMOTIONCOLLECTION> ByPromoID(this IQueryable<TBLPROMOTIONCOLLECTION> qry, int promotionID)
    {
        //Return the filtered IQueryable object
        return from c in qry
               where c.PROMOTION_ID == promotionID
               select c;
    }

FirstorDefault не решает мою проблему, так как я ожидаю кратных. Любая помощь будет оценена.

Спасибо, Билли

1 Ответ

1 голос
/ 13 октября 2009

Ошибка здесь:

.SingleOrDefault ();

(3-я строка вашего основного процесса.) Выдает, когда IQueryable возвращает> 1 элемент, что делает ваш ByPromoId.

Одним из исправлений было бы изменить ваш код на:

promotionCollectionInfo = WebStoreDelegates.selectPromotionCollection
    .Invoke(webStoreContext).ByPromoID(promotionId).ToList();

foreach (var pc in promotionCollectionInfo)
{
    webStoreContext.DeleteObject(pc);
}
webStoreContext.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...