我有一个带有联系人列表的客户。此列表是一个ISet集合。我无法对此执行Linq查询。你能帮我吗?
谢谢,
public class Customer
{
public virtual Iesi.Collections.Generic.ISet<Contact> Contacts { get; set; }
}
Customer customer = session.Get(id);
customer.Contacts = // Error - customer.Contacts.Where(x => x.Id != contactId);
更新1
尝试了这个:
from p in customer.Contacts.AsEnumerable() where p.Id != id select p;
where.System.Collections.Generic.IEnumerable上的错误”
到“ Iesi.Collections.Generic.ISet”。
存在显式转换(您是否缺少演员表?)
最佳答案
我相信这个问题与实现IEnumerable 的IESI ISet 没有关系(确实如此,BTW),但是答案是由对原始帖子“更新”中提到的强制转换异常指出的。
线...
customer.Contacts = customer.Contacts.Where(x => x.Id != contactId);
...实际上(不正确地)试图将IEnumerable (.Where(...)运算符的结果)分配给ISet 类型的属性(Customer类的.Contacts属性) 。
我强烈怀疑这条线会很好...
IEnumerable<Contact> contacts = customer.Contacts.Where(x => x.Id != contactId);
...表明.Where(...)运算符在IESI ISet 上工作正常,但.Where(...)返回的(当然)是IEnumerable 。
为此,您需要将.Where(...)操作的结果从IEnumerable 转换为ISet ,然后再尝试将其分配给customer.Contacts属性。
关于c# - 对ISet集合的Linq查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7160450/