Code First的LINQ NotSupportedOperation异常

时间:2012-12-11 17:50:22

标签: c# linq entity-framework code-first

我有一个DbSet联系人,我正在尝试执行以下查询:

from contact in Context.Contacts 
where contact.Equals("given contact") 
select contact; 

我得到NotSupportedOperationException,系统无法创建非标量类型,如整数或字符串或GUID。
如何在不从数据库中检索所有记录的情况下有效地执行相同的查询(例如,在SQL Server数据库上执行过滤操作)?

注意:我已经覆盖了联系人类型中的Equals方法。

1 个答案:

答案 0 :(得分:4)

实体框架无法在SQL代码中将调用转换为Equals。只需手动比较属性:

from contact in Context.Contacts 
where contact.Id == givenContact.Id
select contact;

另一个(非常慢)选项 - 从数据库中获取所有联系人并在内存中进行比较:

Context.Contacts.ToList().Where(contact.Equals(givenContact));