2015-02-09 42 views
1

這段代碼不斷髮出此錯誤。 :錯誤:在此上下文中僅支持基元類型或枚舉類型EF

Unable to create a constant value of type 'Repository.DBModel.Subscriber'. Only primitive types or enumeration types are supported in this context.

我已經改變了它幾次,但它一直想出這個錯誤。

using (SubscriberDBHandler db = new SubscriberDBHandler()) 
{ 
    IEnumerable <Subscriber> NewSubscribers = Subscribers 
               .Where(sub => db.Subscriber 
               .Any(aSub => !aSub.Email.Equals(sub.Email))); 
    List<Subscriber> updateSubscribers = db.Subscriber 
              .Where(dbSub => Subscribers 
              .Any(lSub => lSub.Email 
              .Equals(dbSub.Email))).ToList(); 
    if(NewSubscribers.Count() >= 1) 
    { 
     db.Subscriber.AddRange(NewSubscribers); 
    } 
    updateSubscribers.ForEach(aSub => aSub.State = Subscribers 
                .FirstOrDefault(sub => sub.Email 
                .Equals(aSub.Email)).State ?? "Error"); 
    db.SaveChanges(); 
} 

我非常感謝,如果有人能指出我的錯誤或想出一個更有效的方法來做到這一點。

提前感謝您的時間和幫助。


我知道有幾個帖子出現這個錯誤,但是當他們閱讀時我無法弄清楚他們與我的問題有何關係。所以我很抱歉,如果這是一個常見的錯誤和其他人提供瞭解決方案

對象認購是List<Subscriber>

我似乎沒有能夠找到行,但。堆棧跟蹤確實包含了這一點。

at System.Linq.Enumerable.ToList[TSource](IEnumerable 1 source) at Repository.SubScribRepository.AddOrUpdateSubscribers(List 1 Subscribers)

+2

你好,請放一點精力格式化你的代碼(正確縮進等),刪除註釋掉的代碼,並讓我們知道錯誤發生在哪一行。 – 2015-02-09 09:02:23

+3

這個對象是什麼類型的「訂閱者」?或者請發佈實體模型。 – 2015-02-09 09:04:46

回答

3

您直接在LINQ語句中使用本地集合Subscribers。但是這些對象不能被翻譯成SQL。只有從原始類型到數據庫類型的映射。

我建議你在Contains之類的語句使用

var emails = Subscribers.Select(s => s.Email).ToList(); 

,並繼續使用這些字符串(即原始值):

var newSubscribers = db.Subscriber 
         .Where(dbSub => !emails.Contains(dbSub.Email)) 
         .ToList(); 
var updateSubscribers = db.Subscriber 
          .Where(dbSub => emails.Contains(dbSub.Email)) 
          .ToList(); 
+0

我看到我會改變這個,看看我的問題是否仍然存在。 只是要清楚。 我的錯誤是,列表訂戶 不能在LINQ語句中使用,因爲轉換爲原始類型將不起作用。即使你是從DB表示類創建訂閱者對象。 – Helbo 2015-02-09 13:51:15

+0

是的,那是因爲像Subscribers這樣的實體對象只能在LINQ表達式的一部分時才能用於LINQ,就像'context.Subscribers'。當它們在本地內存中時,無法從它們創建SQL。像'context.Subscribers.Where(s => s == localSubscriberObject)' - 很難將其轉換爲SQL。 – 2015-02-09 14:14:26

+0

我認爲它現在工作,我只得到一個超時。 – Helbo 2015-02-10 12:10:56

相關問題