我有一位客户,其中包含联系人列表。此列表是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'。
存在显式转换(您是否错过了演员?)
答案 0 :(得分:4)
我认为这个问题与IESI ISet&lt; T&gt;无关。实现IEnumerable&lt; T&gt; (它 ,BTW),但答案是由原始帖子的“更新”中提到的强制转换异常指向。
线......
customer.Contacts = customer.Contacts.Where(x => x.Id != contactId);
...确实(错误地)尝试分配IEnumerable&lt; Contact&gt; (.Where(...)运算符的结果)到类型为ISet&lt; Contact&gt;的属性。 (Customer类的.Contacts属性)。
我强烈怀疑这条线路没问题......
IEnumerable<Contact> contacts = customer.Contacts.Where(x => x.Id != contactId);
...证明.Where(...)运算符在IESI ISet&lt; T&gt;上运行良好。但是.Where(...)返回的是(当然)IEnumerable&lt; T&gt;。
为此,您需要从IEnumerable&lt; T&gt;转换.Where(...)操作的结果。到ISet&lt; T&gt;在尝试将其分配给customer.Contacts属性之前。
答案 1 :(得分:0)
我假设ISet是System.Collections.Generic.ISet<T>
。
为System.Linq
添加using语句,并可能引用System.Core.dll
。
如果它是根名称空间Iesi
可能指示的其他内容,您可以使用标准ISet<T>
吗?或者,您能否以某种方式将ISet<T>
转换为IEnumerable<T>
?