我有一个名为 Page 的对象,有一个名为 p 的实例,它有一个名为 AssociatedAttributes 的自定义属性。如果我执行以下操作:
int numMatchingAttributes = p.AssociatedAttributes.Intersect( p.AssociatedAttributes ).Distinct( ).Count( );
numMatchingAttributes 最终等于 0,即使 p 有 6 个 AssociatedAttributes。为什么不等于6?
AssociatedAttributes
是类型List<Attribute>
(Attribute
是我自己的类,不是System.Attribute
)和Attribute
实现IComparable<Attribute>
,我没有实现IEquatable
,应该吗?
这是CompareTo
属性中的实现:
public int CompareTo(Attribute other)
{
return Id.CompareTo(other.Id);
}
Id
是类型Guid
。
这是 Page 上的 AssociatedAttributes 属性:
public List<Attribute> AssociatedAttributes
{
get
{
List<Attribute> list = new List<Attribute>( );
using (
PredictiveRecommendor dbContext =
new PredictiveRecommendor()){
if ( dbContext != null )
{
IQueryable<Attribute> query = from a in dbContext.PageAttributes
where a.Page.Id.Equals(this.Id)
select a.Attribute;
list = query.ToList();
}
}
return list;
}
}
(dbContext 是 Telerik OpenAccess 上下文)
更新:这是最终的工作:在页面中是以下方法:
public int numberOfIntersectedAssociatedAttributes ( Page other )
{
using ( PredictiveRecommendor dbContext = new PredictiveRecommendor( ) )
{
IQueryable<Attribute> thisAssocAttributes = from a in dbContext.PageAttributes
where a.Page.Id.Equals( this.Id )
select a.Attribute;
IQueryable<Attribute> otherAssocAttributes = from a in dbContext.PageAttributes
where a.Page.Id.Equals( other.Id )
select a.Attribute;
IQueryable<Attribute> interSection = thisAssocAttributes.Intersect( otherAssocAttributes );
return interSection.ToList( ).Count;
}
}
这很丑陋,但它有效。