Ошибка Linq: не удается сгруппировать - PullRequest
0 голосов
/ 26 ноября 2010

Вот запрос Linq:

Common.ProductType.ProductTypeEnum[] aCustomerProduct = 
    (from customer in repositoryCustomer.GetAll().Where(cp => cp.Email == strEmail)
    join cp in repositoryCustomerProduct.GetAll() on customer.CustomerId equals cp.CustomerId
    select cp.ProdId
    ).ToArray<ProductType.ProductTypeEnum>();

Здесь все работает нормально: возвращается массив из 4 элементов.

Но здесь мне нужно получать только уникальные предметы, поэтому я добавил группировку здесь:

Common.ProductType.ProductTypeEnum[] aCustomerProduct = 
    (from customer in repositoryCustomer.GetAll().Where(cp => cp.Email == strEmail)
    join cp in repositoryCustomerProduct.GetAll() on customer.CustomerId equals cp.CustomerId
    group cp by cp.ProdId into products0
    select products0.Key
    ).ToArray<ProductType.ProductTypeEnum>();

И вместо массива у меня появляется сообщение об ошибке:

Аргумент 'value' был неправильного типа. Ожидаемый «Common.ProductType + ProductTypeEnum». Фактический 'System.Int32'.

Что не так со вторым запросом?

Пожалуйста, сообщите. Большое спасибо!

P.S. Второй запрос вообще не отправляется на сервер MSSQL (Profiler ничего не показывает для него).

Ответы [ 2 ]

1 голос
/ 26 ноября 2010

Почему вы группируете только для уникальности? Почему бы просто не использовать разные?

(from **blah
join **blaa
select **blah).Distinct().ToArray();

Это даст гораздо более эффективный SQL.

1 голос
/ 26 ноября 2010

Вы сгруппировали по ProdId в качестве ключа, а затем выбрали ключ. Так что если ProdId является целым числом, то ваш запрос возвращает IEnumerable<int>. Тогда вы не сможете неявно изменить массив типа ProductType.ProductTypeEnum.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...