C# Can';t铸造液态玻璃<;Tobject>;拒绝

C# Can';t铸造液态玻璃<;Tobject>;拒绝,c#,entity-framework,linq,C#,Entity Framework,Linq,我有以下代码 var contact = repository.GetContacts.Where(p => p.ID == id); repository.DeleteContact(contact); 变量“contact”的类型为IQueryable,DeleteContact()方法接受一个contact对象 如何将联系人从IQueryable转换为contact?这是因为Where子句返回的是IQueryable(联系人集合),而不是单个联系人(即使集合中可能只有一项) 想到的

我有以下代码

var contact = repository.GetContacts.Where(p => p.ID == id);
repository.DeleteContact(contact);
变量“contact”的类型为
IQueryable
DeleteContact()
方法接受一个contact对象


如何将联系人从
IQueryable
转换为
contact

这是因为
Where
子句返回的是
IQueryable
(联系人集合),而不是单个联系人(即使集合中可能只有一项)

想到的两个选项是删除所有联系人:

foreach (var contact in repository.GetContacts.Where(p => p.ID == id).ToList())
{
    repository.DeleteContact(contact);
}
或者,如果您只希望有一个或没有,您可以使用
SingleOrDefault
获得单个联系人:

var contact = repository.GetContacts.SingleOrDefault(p => p.ID == id);

// If it's not null, delete it
if (contact != null) repository.DeleteContact(contact);

这是因为
Where
子句返回的是
IQueryable
(联系人的集合),而不是单个联系人(即使集合中可能只有一项)

想到的两个选项是删除所有联系人:

foreach (var contact in repository.GetContacts.Where(p => p.ID == id).ToList())
{
    repository.DeleteContact(contact);
}
或者,如果您只希望有一个或没有,您可以使用
SingleOrDefault
获得单个联系人:

var contact = repository.GetContacts.SingleOrDefault(p => p.ID == id);

// If it's not null, delete it
if (contact != null) repository.DeleteContact(contact);

联系人
不是单个联系人。这是它们的集合-因此
联系人
将是一个更好的名称。现在,考虑如何获取这些联系人的
第一个
(或
第一个或默认值
)。您知道,这是一个只有一个联系人的集合。编译器和运行时不知道(只有一个)。一个装有一个鸡蛋的鸡蛋容器仍然是一个鸡蛋容器,而不是一个鸡蛋。因此,
contacts
是一个更好的名称,除非您使用
FirstOrDefault
获取
contact
。如果您确定结果只返回一个对象(记录),您可以使用Single,而(或SingleOrDefault或First and FirstOrDefault)
contact
不是一个联系人。这是它们的集合-因此
联系人
将是一个更好的名称。现在,考虑如何获取这些联系人的
第一个
(或
第一个或默认值
)。您知道,这是一个只有一个联系人的集合。编译器和运行时不知道(只有一个)。一个装有一个鸡蛋的鸡蛋容器仍然是一个鸡蛋容器,而不是一个鸡蛋。因此,
contacts
是一个更好的名称,除非您
FirstOrDefault
将其用于获取
contact
。如果您确定结果只返回一个对象(记录),您可以改为使用Single,Where(或SingleOrDefault或First and FirstOrDefault)为什么要调用
ToList()
仅用于
foreach
?@CamiloTerevinto习惯,因为我们正在从循环内的集合中删除项目为什么要调用
ToList()
仅用于
foreach
?@CamiloTerevinto习惯,因为我们正在从循环内的集合中删除项目