我有这个名为Matches的Azure模型,我有OrderId
和MatchedOrderId
这样的
public String OrderId
{
get
{
return this.PartitionKey;
}
set
{
this.PartitionKey = value;
}
}
public String MatchedOrderId
{
get
{
return this.RowKey;
}
set
{
this.RowKey = value;
}
}
因此,当我有两个订单且匹配时,我在此表中输入两个条目。两个条目是我可以向组织收取他们所拥有的匹配数量。
现在我想显示比赛的数量,之前我一直在做的是像这样获得这个模型中的所有比赛
public static IEnumerable<Match> GetAll()
{
return TableHelper.GetAll<Match>();
}
但现在我想展示实际比赛。所以我想要展示的只是我创建的两个条目的一个条目。在获得所有匹配之后
List<Match> matches = Matches.GetAll();
Linq查询是否可以提供我想要的内容?
这不是所提到的重复,因为记录是相同的,但这里的条目是不同的。一个例子是,
条目1:
OrderId: "xyz"
MatchedOrderId: "abc"
第2条:
OrderId: "abc"
MatchedOrderId: "xyz"
如果我做了简单的区别,它将无效。
答案 0 :(得分:1)
您需要Distinct
- 具有IEqualityComparer
- 重载的方法来定义相等意味着什么:
var result = matches.Distinct(new EqualityComparer());
class EqualityComparer : IEqualityComparer<Matches> {
public bool Equals(Matches m1, Matches m2) { return m1.OrderId == m2.MatchedOrderId && m2.OrderId == m1.MatchedOrderId ; }
public int GetHashCode(Matches m) { return 17 * m.OrderId.GetHashCode() + m.MatchOrderId.GetHashCode(); }
}
在Equals
上实施GetHashCode
- 和IEqualityComparer
- 方法非常重要。
return m.OrderId.GetHashCode() + m.MatchOrderId.GetHasCode();
我们还需要实现此方法的原因是在对Equals
进行任何调用之前比较两个实例时,比较两个实例的哈希码,如果实例可能相等,则作为某种预指示符。当实际检查相等性具有很多逻辑并且包含许多不同属性的比较时,这可能特别有用。进一步阅读this thread。