在Linq中向实体订购

时间:2017-01-29 11:31:16

标签: entity-framework linq c#-4.0 entity-framework-6

我的sql表有两列sizename和orderof。我想从该表中选择所有的sizenames,但按照命令的升序排列.Iam使用EF6和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));
            }

我知道这可能已被问到了。但这些问题中没有提供的解决方案为我工作

2 个答案:

答案 0 :(得分:3)

由于LINQ to 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
                  };

答案 1 :(得分: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();