私は次のデータ構造を持っています
Store
Id
StoreName
Product
Id
Name
StoreId
Category
Id
Name
ProductCategory
Id
ProductId
CategoryId
Deal
Id
Name
DealCategory
Id
DealId
CategoryId
私の要件は、カテゴリを表す文字列のコレクションを取得し、指定されたカテゴリのいずれかに製品または取引がある店舗を照会することです。困っているので誰か助けてください。カテゴリでフィルタリングしないと正しい結果が得られますが、フィルタ ビットが失敗しているように見えます。レコードが返されず、指定されたカテゴリに製品と取引の両方を持つストアが少なくとも 1 つあると確信しています。
これまでのコードは次のとおりです。 where 句を削除すると、正しいデータ、つまりすべてのストア (取引または製品がある?! この差別はまだテストしていません) が得られます。
from s in ctx.Store
join d in ctx.Deals on s.ID equals d.StoreID
join l in ctx.Products on s.ID equals l.StoreID
where d.DealCategories.Any(dc => categoriesList.Contains(dc.Category.Name.ToLower()))
group s by s.ID into sg
select new { Store = sg.FirstOrDefault() };