Нужна помощь в рефакторинге оператора LINQ с предложением Group By? - PullRequest
0 голосов
/ 16 октября 2011

Linq-To-SQL, требующий рефакторинга, находится ниже:

   var query = from p in Cache.Model.Products
               join sc in Cache.Model.ShishaCombinations on p.ProductID equals sc.ProductID
               where sc.NumberOfMixes ==  mixes
               select new { p.ProductID, p.Name };

со следующей однострочной:

   group by p.ProductID

Я знаю, что group by пропускает любую потребность в предложении select, чтобы оба они могли жить вместе в одном и том же операторе LINQ-To-SQL, так что, может, кто-нибудь поможет мне реорганизовать приведенное выше, пожалуйста?

Чтобы помочь мне удалить любые повторяющиеся данные в моих результатах. <- В этом весь вопрос. Продукт повторяется несколько раз в зависимости от количества ароматов, которые используются продуктом. Таким образом, в результате в таблице «ShishaCombination» один ProductID может повторяться много раз по одному для каждого используемого им аромата. Я хотел бы сгруппировать результаты, полученные в результате запроса выше, или вызвать его отдельно, так как я не хочу добавлять продукт «n» раз в мой графический интерфейс, потому что он появляется «n» количество раз в моих результатах. Надеюсь, это прояснит любую путаницу в том, что я пытаюсь сделать. </p>

Ответы [ 2 ]

1 голос
/ 16 октября 2011

Код ниже - это все, что мне нужно:

        var query1 = (from p in Cache.Model.Products
                     join sc in Cache.Model.ShishaCombinations on p.ProductID equals sc.ProductID
                     where sc.NumberOfMixes == mixes
                     select new { p.ProductID, p.Name }).Distinct();

Уфук, спасибо за ответ, приятель.Я знал, что мой ответ был простым LOL:

0 голосов
/ 16 октября 2011

Вы можете использовать в ключевое слово после предложения выбора.Вы не можете просто группировать, потому что вы проецируете анонимный тип.

   var query = from p in Cache.Model.Products
               join sc in Cache.Model.ShishaCombinations on p.ProductID equals sc.ProductID
               where sc.NumberOfMixes ==  mixes
               select new { p.ProductID, p.Name } into productInfo
               group productInfo by productInfo.productId;
...