我有一个类Item
public class Item
{
public int ParentId {get;set;}
public int TypeId {get;set;}
public int? AttachedFileId {get;set;}
}
我有必要为每个父母接收这种或那种类型的存在标志。item没有附件的存在被认为是不存在,写了以下请求:
var items = _context.Set<Items>()
.GroupBy(x=>x.ParentId)
.Select(x=>new
{
ParentId = x.Key,
Type1 = x.Where(x=>x.TypeId==1).Any() && x.Where(x=>x.TypeId==1).All(x=>x.AttachedFileId!=null)
//И так для каждого типа
})
请求返回我需要的数据,但我觉得条件
x.Where(x=>x.TypeId==1).Any() && x.Where(x=>x.TypeId==1).All(x=>x.AttachedFileId!=null)可以改写
这也让我感到困惑,All空集合的方法返回true
小提琴的例子
从数学的角度来看,一切都是正确的:该方法是全称量词
All的类比,对于空集它始终为真,无论条件如何。这个方法是这样实现的(减去检查):
简化你的表达方式效果不是很好。有没有可能一次pass就把变量堆起来,但是严重违背了functionality的思路: