Linq查询ISet集合

时间:2011-08-23 11:40:21

标签: c# linq nhibernate

我有一位客户,其中包含联系人列表。此列表是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'。  存在显式转换(您是否错过了演员?)

2 个答案:

答案 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>