2009-10-12 168 views
1

当试图填充我的促销表对象时,我收到以下错误“序列包含多个元素”。我知道我收到这个错误,因为我的查询返回多个值,因为它应该。任何人都可以指出我正确的方向,除了循环以外如何删除多个记录(如果可能的话使用EF)。序列包含多个元素

主要PROC:

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不解决我的问题。 任何帮助,将不胜感激。

谢谢,比利

+0

你能请精炼您的问题。基本上你是问你为什么得到“序列包含多个元素”的错误,或者你问如何在EF中一次删除多个对象? - PS如果你问如何批量删除EF中的项目没有循环我认为答案是,你不能。 ObjectContext只有一个DeleteObject(对象实体)方法,并且缺少一个DeleteAllObjects或类似的方法。 – 2009-10-12 20:48:58

+0

问如何解决我得到的错误,因为我需要删除倍数。猜你回答了我的问题。可能只是去SP路线。谢谢。 – 2009-10-12 20:53:24

回答

1

的错误是在这里:

.SingleOrDefault();

(你的主要过程的第三行)当IQueryable返回> 1的元素时,抛出你的ByPromoId。

一个解决将是改变你的代码:

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

foreach (var pc in promotionCollectionInfo) 
{ 
    webStoreContext.DeleteObject(pc); 
} 
webStoreContext.SaveChanges(); 
+0

那种我想避免的。这个循环可能会相当长,因此,一次删除100到200条记录1似乎相当耗时,而所有这些记录的删除操作相对较少。只是继续前进,并将sp映射到我的实体表的cud映射,并形成我的删除sp以摆脱我想要的倍数。 Thansk虽然你的快速反应。 – 2009-10-13 13:39:55

+0

你说你想解决这个错误。我带你了解错误。如果你实际上有完全不同的问题,你能直接问一下吗? – 2009-10-13 14:06:02

相关问题