我的大脑在我需要设置的查询上失败了。
我有一个具有两个(相关)属性的 Cat 对象:
public virtual ICollection<Ribbon> Ribbons { get; set; }
public virtual ICollection<Trophy> Trophies { get; set; }
Ribbon 和 Trophy 都有一个名为“UmbracoActivityId”的整数属性。ribbon 和奖杯彼此之间没有直接关系,但它们都与一只猫和一个 UmbracoActivity 相关。猫在 UmbracoActivity 中完成的每个“步骤”都会获得一条丝带,完成所有步骤后会获得一个奖杯。他们是非常有竞争力的猫:)
我需要做的是计算已经开始 UmbracoActivity 但还没有完成所有步骤(没有收到奖杯)的猫。
简而言之:找到所有不同的丝带,其中拥有丝带的猫没有奖杯,其 UmbracoActivityId 与丝带的 UmbracoActivityId 相同。
我在代码中得到了什么:
var ribbons = db.Ribbons
.Where(ribbon => db.Cats.Find(ribbon.CatId)
.Trophies.Any(trophy => trophy.UmbracoActivityId == ribbon.UmbracoActivityId));
我快接近了,但是如果功能区确实有一个具有相同 UmbracoActivityId 的奖杯,那么 .Any() 语句是正确的。我需要相反的。将“==”切换为“!=”是很容易的,但在这种情况下,一只猫可能拥有许多具有不同 UmbracoActivityId 的奖杯。
我需要在某处反向声明以搜索相反的内容,但我不确定在哪里执行此操作:(
提前致谢。