セットアップが必要なクエリで頭が混乱しています。
2 つの (関連する) プロパティを持つ Cat オブジェクトがあります。
public virtual ICollection<Ribbon> Ribbons { get; set; }
public virtual ICollection<Trophy> Trophies { get; set; }
リボンとトロフィーの両方に、"UmbracoActivityId" という名前の整数プロパティがあります。リボンとトロフィーは互いに直接関連していませんが、どちらも猫と 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() ステートメントは true です。私は反対が必要です。「==」を「!=」に変更したくなるかもしれませんが、この場合、猫は異なる UmbracoActivityId を持つ多くのトロフィーを持つことができます。
反対を検索するには、どこかでステートメントを逆にする必要がありますが、どこでそれを行うべきかわかりません:(
前もって感謝します。