Sreenath Ganga
Sreenath Ganga

Reputation: 736

Order By in Linq to Entities

I had sql table with two columns sizename and orderof . I want to select from that table all the sizenames but in ascending order of the orderof .Iam using EF6 and Linq to Entities

I had used the Query Like this .But its not working(sorting)

   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));
            }

I know this may be already asked. But none of the solution provided in those questions working for me

Upvotes: 0

Views: 773

Answers (2)

Yashveer Singh
Yashveer Singh

Reputation: 1977

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

here is my class .

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();

Upvotes: 0

Ivan Stoev
Ivan Stoev

Reputation: 205539

Since LINQ to Entities translates your query to SQL, ordering before Distinct has no effect. And the problem is that after Distinct you have no access to the property needed for ordering.

So you need an alternative way, which luckily is the GroupBy method - its similar to Distinct but allows you to access the properties of the elements sharing the same key. Thus you can order the result based on some aggregates (in your case looks like Min is the appropriate):

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
                  };

Upvotes: 3

Related Questions