Error: Only primitive types or enumeration types are supported in this context EF
Error: Only primitive types or enumeration types are supported in this context 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();
}
如果有人能指出我的错误或想出更有效的方法来做到这一点,我将不胜感激。
预先感谢您的时间和帮助。
我知道有一些 post 有这个错误,但在阅读它们时我无法弄清楚它们与我的问题有何关系。所以如果这是一个常见错误并且其他人提供了解决方案,我很抱歉
订阅者对象是 List<Subscriber>
我好像找不到台词但是。堆栈跟踪确实包含这个。
at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source)
at Repository.SubScribRepository.AddOrUpdateSubscribers(List
1 Subscribers)
您直接在 LINQ 语句中使用本地集合 Subscribers
。但是这些对象不能翻译成SQL。只有原始类型到数据库类型的映射。
我建议你使用
var emails = Subscribers.Select(s => s.Email).ToList();
然后在 Contains
语句中使用这些字符串(即原始值)继续,例如:
var newSubscribers = db.Subscriber
.Where(dbSub => !emails.Contains(dbSub.Email))
.ToList();
var updateSubscribers = db.Subscriber
.Where(dbSub => emails.Contains(dbSub.Email))
.ToList();
将 updateSubscribers 更改为 IEnumerable 将防止此错误
这段代码一直报这个错。 :
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();
}
如果有人能指出我的错误或想出更有效的方法来做到这一点,我将不胜感激。
预先感谢您的时间和帮助。
我知道有一些 post 有这个错误,但在阅读它们时我无法弄清楚它们与我的问题有何关系。所以如果这是一个常见错误并且其他人提供了解决方案,我很抱歉
订阅者对象是 List<Subscriber>
我好像找不到台词但是。堆栈跟踪确实包含这个。
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source) at Repository.SubScribRepository.AddOrUpdateSubscribers(List
1 Subscribers)
您直接在 LINQ 语句中使用本地集合 Subscribers
。但是这些对象不能翻译成SQL。只有原始类型到数据库类型的映射。
我建议你使用
var emails = Subscribers.Select(s => s.Email).ToList();
然后在 Contains
语句中使用这些字符串(即原始值)继续,例如:
var newSubscribers = db.Subscriber
.Where(dbSub => !emails.Contains(dbSub.Email))
.ToList();
var updateSubscribers = db.Subscriber
.Where(dbSub => emails.Contains(dbSub.Email))
.ToList();
将 updateSubscribers 更改为 IEnumerable 将防止此错误