我在下面粘贴我的代码;
我的基类重写了 Equals 和 getHashcode,但 linq 查询没有返回不同的结果。结果中有多个具有相同 ID 的城市。
public class Product : EntityBase
{
public virtual string Name { get; set; }
public virtual IList<ProductDayDefinition> Days { get; set; }
}
public class ProductDayDefinition : EntityBase
{
public virtual Product Product { get; set; }
public virtual City City { get; set; }
}
public abstract class EntityBase
{
public virtual int ID { get; protected internal set; }
protected EntityBase() : this(0)
{
}
protected EntityBase(int ID)
{
this.ID = ID;
if (this.ID == null)
this.ID = 0;
}
#region Equals definitions
public override bool Equals(object entity)
{
return entity != null
&& entity is EntityBase
&& this == (EntityBase)entity;
}
public static bool operator ==(EntityBase base1, EntityBase base2)
{
if ((object)base1 == null && (object)base2 == null)
return true;
if ((object)base1 == null || (object)base2 == null)
return false;
if (base1.ID != base2.ID)
return false;
return true;
}
public static bool operator !=(EntityBase base1, EntityBase base2)
{
return (!(base1 == base2));
}
public override int GetHashCode()
{
return this.ID.GetHashCode();
}
#endregion
}
var cities = (from product in NHibernateSession.Linq<Product>()
from day in product.Days
where day.City != null
select day).Distinct();
最佳答案
查询在服务器端(在数据库中)执行。 覆盖 equals 或 gethashcode 没有任何区别。
只要选择id属性,最后调用Distinct即可。 不过,您必须遍历结果才能获得更多信息。
或
您可以使用联接来获取从子查询返回的 ID 的详细信息。
关于c# - linq distinct 没有给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2100482/