2014-09-04 3 views
0

재료를 보유하는 쇼핑 목록 DataTable 있습니다. 하나의 성분이 쇼핑 목록에 한 번 더 추가 될 수 있습니다.엔티티 프레임 워크 get (고유) 횟수 이벤트에 ID가 있습니다.

나는 하나의 성분이 얼마나 많은 쇼핑 목록에 있는지 선택하고 싶습니다. 성분이 하나 개의 쇼핑에 존재하는 여러 번하더라도 목록 쿼리 짧은 1. 를 반환해야합니다 :

: 나는 ingredientId 포함 ShoppingListIngredients의 COUNT (상관없이 한 번 또는 여러 번)

는이 같은 시도가 필요합니다

var usersShoppingListIngredients = context.ShoppingListIngredients 
       .Where(sli => sli.ShoppingList.userId == userId) 
       .GroupBy(sli => sli.ingredientId) 
       .Select(sli => new 
       { 
        itemId = sli.Key, 
        item = sli.FirstOrDefault().CodingKeys.Ingredients.FirstOrDefault(i => i.languageId == languageId).coding, 
        itemsCount = sli.Count(), 
        percent = [Tell_Me_How] * 100/totalPurchases 
       }).OrderByDescending(r => r.itemsCount); 

그러나 그것은 나를 거짓 값을 반환 - 여러 값을 삽입 할 때 모든 발생 횟수를 반환합니다.

저는 Entity Framework 4.0을 사용하고 있습니다.

이 어떤 힌트를 주시면 감사하겠습니다)

+0

을 시도 그냥'sli.Count() * 100/totalPurchases'를 사용할 수없는 이유를 잘 모르겠어요. 'ShoppingListIngredients'는 조인 테이블 (shoppinglistid PK, ingredientsid PK, userid PK)처럼 보입니다. 당신이 ingredientsId로 테이블을 그룹화 할 때 거기에 다중 쇼핑 목록 ID가 없어야합니다. 샘플 데이터를 제공 할 수 있거나 클래스가 어떻게 생겼는지는 훌륭합니다. –

+0

sli.Count()는 여전히 각 ID에 대한 총 발생 횟수를 반환합니다. ShoppingListIngredients로 그룹화하고 성분이 3 번 삽입되면 3이됩니다. ingredientsId가 포함 된 ShoppingListIngredients가 필요합니다 (1 회 또는 여러 번). – CyberHawk

답변

0

itemsCount = sli.DistinctBy(s => s.ShoppingListId).Count()

+0

정보 주셔서 감사합니다,하지만 불행히도 DistinctBy 기능이 없습니다. 아마도 EF 4.0 기능이 아닙니다. 또한 Distinct를 사용하려고하면 매개 변수를 사용할 수 없습니다. 오류 : labda 표현식을 대리자 유형이 아니므로 "system.collections.generic.IE.quality.comparer" 유형으로 변환 할 수 없습니다. – CyberHawk