この問題を説明する方法が本当にわかりません。重複投稿でしたらすみません。以下のこのコードは問題なく動作します。ID 1031 の製品を返します。フィルターを実行すると (どこで)、同じ製品が得られます (これは部門とカテゴリの両方にあるため)。わかった!しかし、where 1031 (コードの 2 行目) を削除すると、機能しなくなります。GroupsID と呼ばれる IEnumerable 属性には、(部門の) 内部に 1 つの値しかありません。とても奇妙です。where product.id == 1031 を配置すると、属性には 2 つの値 (49 と 137) がありますが、where product.id==1031 を削除すると、各製品の最初のグループ値 (部門) のみが返されます。リストにあるすべての製品には値が 1 つしかありません (ほとんどの場合 49)。
model.Products = from product in context.Products
where product.ID == 1031
orderby Guid.NewGuid()
select new ProductViewModel()
{
ID = product.ID,
FullDescription = product.FullDescription,
FileName = (from image in product.ProductImages
select image.FileName).FirstOrDefault(),
Price = (from priceList in product.PriceListProducts
select priceList.Price).FirstOrDefault(),
GroupsID = (from related in product.ProductGroupRelateds
select related.ProductGroup_ID)
};
CategoryViewModel ctg = model.Categories.Where(categ => categ.FriendlyUrl.ToLower().Equals(filter.ToLower()) || categ.FriendlyUrl.ToLower().Equals(categoryURL.ToLower())).Select(categ => new CategoryViewModel() { ID = categ.ID, Name = categ.Name, FriendlyUrl = categ.FriendlyUrl, Index = categ.Index }).DefaultIfEmpty(null).First();
if (ctg != null)
model.Products = model.Products.Where(product => product.GroupsID.Contains(ctg.ID));
DepartmentViewModel dpt = model.Departments.Where(depto => depto.FriendlyUrl.ToLower().Equals(filter.ToLower()) || depto.FriendlyUrl.ToLower().Equals(departmentURL.ToLower())).Select(depto => new DepartmentViewModel() { ID = depto.ID, Name = depto.Name, FriendlyUrl = depto.FriendlyUrl, Index = depto.Index }).DefaultIfEmpty(null).First();
if (dpt != null)
model.Products = model.Products.Where(product => product.GroupsID.Contains(dpt.ID));