2017-01-29 3 views
0

У меня была таблица sql с двумя столбцами sizename и orderof. Я хочу, чтобы выбрать из этой таблицы все sizenames, но в порядке возрастания orderof .iam с использованием Ef6 и Linq к EntitiesСортировать по: в Linq to Entities

Я использовал запрос Как это .Но его не работает (сортировка)

var sizedetails = (from size in enty.StyleSizes 
           where size.OurStyleID == ourstyleid 
           orderby size.Orderof 
           select new 
           { 
            size.SizeName 

           }).Distinct(); 


      //var sizedetails = enty .StyleSizes.Where(u => u.OurStyleID == ourstyleid).Select(u => u.SizeName).Distinct(); 

      foreach (var sizedet in sizedetails) 
      { 
       dt.Columns.Add(sizedet.SizeName.Trim(), typeof(String)); 
      } 

Я знаю, что это уже можно спросить. Но ни одно из решений, представленных в этих вопросах, работающих на меня

+0

вы пробовали заказ после выбора ??? –

+1

hi Я попытался ответить на него в коллекции класса памяти, пожалуйста, проверьте и дайте мне знать, если это вернет вам правильный результат. –

+0

Используйте 'orderby' last. Тем не менее, похоже, что вы заказываете что-то ('Orderof'), которое вы не выбираете, а затем принимаете отдельный набор этого (' SizeName'). Это не то, что SQL может выразить легко. –

ответ

3

С помощью LINQ к Entities переводит запрос на SQL, заказ перед тем Distinct не имеет никакого эффекта. И проблема в том, что после Distinct у вас нет доступа к собственности, необходимой для заказа.

Таким образом, вам нужен альтернативный способ, которым, к счастью, является метод GroupBy - его аналогичный Distinct, но позволяет получить доступ к свойствам элементов, разделяющих один и тот же ключ. Таким образом, вы можете заказать результат, основанный на некоторых агрегатах (в вашем случае выглядит Min это уместно):

var sizedetails = from size in enty.StyleSizes 
        where size.OurStyleID == ourstyleid 
        group size by size.SizeName into sizeGroup 
        orderby sizeGroup.Min(size => size.Orderof) 
        select new 
        { 
         SizeName = sizeGroup.Key 
        }; 
+0

Плита Его работаю, но нужно добавить «)» –

+0

@SreenathGanga Спасибо, на самом деле я просто забыл удалить '(' :) –

0
I dint tried with DB but with in memory collection it gives be correct result . 

вот мой класс.

class StyleSizes 
    { 
     public int Orderof { get; set; } 
     public string SizeName { get; set; } 
     public int OurStyleID { get; set; } 
    } 
    // logic to ue orderby 
     var list = new List<StyleSizes> { new StyleSizes { Orderof=2,SizeName="B",OurStyleID=1 }, 
     new StyleSizes { Orderof=11,SizeName="C" ,OurStyleID=2}, 
     new StyleSizes { Orderof=9,SizeName="D" ,OurStyleID=1}, 
     new StyleSizes { Orderof=9,SizeName="D" ,OurStyleID=1}, 
     new StyleSizes { Orderof=3,SizeName="E" ,OurStyleID=1}, 
     new StyleSizes { Orderof=4,SizeName="F" ,OurStyleID=1} 

    }; 

    var orderList = list.Where(x=>x.OurStyleID==1).OrderBy(x => x.Orderof).Select(c => new { c.SizeName }).Distinct(); 
+0

Его работа, но когда я добавил, где условие останавливает сортировку –

+0

Привет @SreenathGanga Я проверил, и если вы добавите, где он также работал, см. Обновленный ответ. –