gpt4 book ai didi

c# - linq distinct 没有给出不同的结果

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:09 25 4
gpt4 key购买 nike

我在下面粘贴我的代码;

我的基类重写了 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 的详细信息。

http://msdn.microsoft.com/en-us/library/cc716801.aspx

关于c# - linq distinct 没有给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2100482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com