2011-12-22 1 views
1

検索結果のセットを作成しました。利用可能な猫のフィルターをそのフィルター内に作成したいと考えています。しかし、私はこれをしようとするときに最も奇妙なエラーを取得します。linqで指定された結果のカテゴリーに属する商品の数をカウントするアドバイス

Unable to create a constant value of type 'NAMESPACE.Models.Products'. Only primitive types ('such as Int32, String, and Guid') are supported in this context. 

これは私がしようとしているコードです:

var cats = (from p in ctx1.SubCategories 
         where myCats.Contains(p.subCategoryId) && p.enabled 
         select new 
          AvailableSubCats 
            { 
             CategoryName = p.subCategoryName, 
             Id = p.subCategoryId, 
             TotalItems = model.Count(x => x.subCategoryId == p.subCategoryId) 
            }).Distinct(); 

製品はtotalItemsのラインにモデルと呼ばれるオブジェクトです。同じエラーで

var cats = from c in ctx1.SubCategories 
         join p in model on c.subCategoryId equals p.subCategorySubId 
         group p by c.subCategoryName 
         into g 
         select new 
          AvailableSubCats 
            { 
             CategoryName = g.Key, 
             Id = 0, 
             TotalItems = g.Count() 
            }; 

、と私はカテゴリとそのIDの名前を取得する方法を知らないので、このようにいけない: 私もこれを試してみました。

大変助かりました。私は、エンティティフレームワーク4.1を使用しています

おかげ

PS、.NET 4とMVC 3、短期でのmysql

私は、LINQでこれを実行しようとしていますが、製品側ではすでに結果でありました

select c.*, (select count(productId) from Products where Products.subCategoryId = c.subCategoryId) as counter from SubCategories c 

答えて

2

EFが理解できるように、製品のリストをsubCategoryIdのリストに変えることができます。ような何か:

var subCategoryIds = model.Select(m => m.subCategoryId); 

var cats = (from p in ctx1.SubCategories 
ctx1.SubCategories 
where myCats.Contains(p.subCategoryId) && p.enabled 
select new 
    AvailableSubCats 
    { 
     CategoryName = p.subCategoryName, 
     Id = p.subCategoryId, 
     TotalItems = subCategoryIds.Count(x => x == p.subCategoryId) 
    }).Distinct(); 
+0

私は多かれ少なかれ、その値を持って、それを行うと私はmyCatsと呼ばれているものですが、私はそれが{「選択のネストのレベルが高すぎる」のエラーが発生していることを実行するカントカント}、可能であればシンプルにする必要があります – davethecoder

+0

私はSQL Serverを使用して動作するようですが、MySQLを使用していますか? – NKeddie

+0

はいmysqlサーバーは、mysqlの唯一のバグと思われる、私はその汚れているが、猫を介してループしているし、一時リストに入れて、asQueryableが唯一の方法だと思われるので、一時リストを返しました: – davethecoder

関連する問題