0

カテゴリから目に見える製品のみをフィルタリングする必要がありますが、機能していません。

Category category = db.Categories
            .Include(c => c.Products.Where(p => p.IsVisible))
            .First(c => c.CategoryID == id);

エラー:

インクルード パス式は、型で定義されたナビゲーション プロパティを参照する必要があります。参照ナビゲーション プロパティにはドット パスを使用し、コレクション ナビゲーション プロパティには Select 演算子を使用します。

アップデート

 var result = (from c in db.Categories
                             where c.CategoryID == id
                             select new
                             {
                                 CategoryID = c.CategoryID,
                                 Description = c.Description,
                                 Products = (from p in db.Products
                                             where p.IsVisible
                                             && p.CategoryID == c.CategoryID
                                             orderby p.DateSent descending
                                             select p)
                             }).FirstOrDefault();

しかし、今はanonymousTypeをCategoryにキャストする必要があります

4

2 に答える 2

1

必要な場合、クエリは意味がありません。

カテゴリの可視製品

目に見える製品が本当に必要な場合は、これを試してください。

var visibleProducts = db.Categories
                        .Where(c => c.CategoryID == id)
                        .Select(c => c.Products.Where(p => p.IsVisible));

注: 未テスト

于 2012-07-04T19:34:42.947 に答える
0

たぶん次のようなもの:

var category = db.Products.Where(p=>p.IsVisible && p.CategoryID == id).Include("Category").ToList().Select( p=> p.Category).Distinct();

ToList のせいで理想的ではないかもしれませんが、今のところ他に方法はありません。

Distinct を FirstOrDefault() に変更できるかもしれません...

var category = db.Products.Where(p=>p.IsVisible && p.CategoryID == id).Include("Category").ToList().FirstOrDefault().Category;

どちらもテストされていません...

于 2012-07-04T20:26:29.880 に答える