2017-01-29 10 views
0

私はsizenameとorderofの2つの列を持つsqlテーブルを持っていました。 (ソート)私はそのテーブルからすべてのsizenamesを選択したいが、エンティティOrder By Linq to Entities

にEF6とのLINQを使用してorderof .Iamの昇順に、私はそのが働いていない.But、このようなクエリを使用していた

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

こんにちは私はメモリクラスコレクションでこれに答えることを試みました。これが正しい結果を返すかどうかを確認してください。 –

+0

最後に 'orderby'を使用してください。つまり、あなたが選択していないもの(Orderof')を注文してから、その別のセット( 'SizeName')を取るように見えます。 SQLが簡単に表現できるものではありません。 –

答えて

3

LINQ to EntitiesはクエリをSQLに変換するため、Distinctより前の注文は効果がありません。そして問題は、Distinctの後に、注文に必要なプロパティへのアクセス権がないことです。

Distinctと似ていますが、同じキーを共有する要素のプロパティにアクセスすることができます。GroupByの方法が幸いです。したがって、いくつかの集計に基づいて結果を注文することができます(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

Stoveそれは動作しますが、 ")"を追加する必要があります –

+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チェックして、それが動作した場所を追加してください。 –