我正在寻找一个只有当一组数据至少有一条带有State == 0
的记录而另一条带有State > 0
我有这个方法:
public bool HasHistory(Guid id)
{
return GetHistory(id).Any(x => x.State == 0); //&&x.State > 0 ?!
}
我不知道如何实现这一点,因为大多数LINQ扩展方法分别迭代每个元素!
答案 0 :(得分:10)
这个有什么问题?
public bool HasHistory(Guid id)
{
var history = GetHistory(id);
return history.Any(x => x.State == 0) && history.Any(x => x.State > 0);
}
实际上,如果你正在使用大数据,这很糟糕,因为你枚举了2次而不是1次。否则,只需使用此解决方案。
答案 1 :(得分:3)
public bool HasHistory( Guid id )
{
var history = GetHistory( id );
var check1 = false;
var check2 = false;
return history.Any( x =>
{
check1 = check1 || x.State == 0;
check2 = check2 || x.State > 0;
return check1 && check2;
} );
}
答案 2 :(得分:2)
只需使用&&
- 运算符组合不同查询的结果:
public bool HasHistory(Guid id)
{
var hist = GetHistory(id);
return hist.Any(x => x.State == 0) && hist.Any(x => x.State > 0);
}
答案 3 :(得分:0)
您可以使用Aggregate
方法:
public bool HasHistory(Guid id)
{
var result = GetHistory(id)
.Aggregate(new { stateIsZero = true, stateIsPositive = true, hasItems = false },
(a, x) => new
{
stateIsZero = a.stateIsZero && x.State == 0,
stateIsPositive = a.stateIsPositive && x.State > 0,
hasItems = true
});
return result.stateIsZero && result.stateIsPositive && result.hasItems;
}
但这种方法不适用于IQueryable