0

私は次のものを持っています:

db.Products.Where(p=>p.Sectors.Where(s=>s.website_id == websiteObj.website_id)).Count();

websiteObjはnullではなく、有効なデータがあります。製品とセクターの間には多対多の関係があります。また、セクターとWebサイトの間には1対多の関係があります。私はウェブサイトから製品に直接アクセスすることはできません。ウェブサイト関連のセクターを経由する必要があります。

とにかく、この例は機能します: db.Sectors.Where(p=>p.website_id == websiteObj.website_id)).Count();

ただし、問題は、最初のLINQクエリで次のエラーが発生することです。 Delegate 'System.Func<BusinessObjects.Product,int,bool>' does not take 1 arguments. Cannot convert lambda expression to type 'string' because it is not a delegate type.

そして、他のいくつかのエラー。

とにかく、私は何が間違っているのですか?これは、LINQを使用した最初の試みです。前もって感謝します。

4

1 に答える 1

2

私はあなたがAny内側のクエリで必要だと思います:

db.Products.Where(p => p.Sectors.Any(s => s.website_id == websiteObj.website_id))
           .Count();

これにより、指定されたwebsite_idを持つ少なくとも1つのセクターを持つすべての製品が返されます。

すべてのセクターが指定されたwebsite_idに属するすべての製品が必要な場合は、次Allの代わりに使用してAnyください。

db.Products.Where(p => p.Sectors.All(s => s.website_id == websiteObj.website_id))
           .Count();
于 2012-08-23T07:40:59.633 に答える