2017-04-20 11 views
0

私はVS 2015でEntity Frameworkを使用しています。 私は数式とInput_Field_Formulasという2つのテーブルを持っています。 私の方法の1つでは、与えられた検索基準に式の型のobservablecollectionを取得したいと考えています。 しかし、結果リストは何らかのソート順でなければならない。 残念ながら、そのsortorderの列は、Input_Field_Formulasテーブルにあります。エンティティフレームワークでLINQ、JOIN、ORDER BYを結合テーブルの列に使用

LINQで作成しようとしましたが、これは機能しません。 数式を降順で取得したいのですが、データベースに保存されている順序で取得します。

public ObservableCollection<Formulas> GetSelectedFormulas(int inputFieldId) 
    { 
     ObservableCollection<Formulas> formulasList = null; 

     try 
     { 
      using (paragraph16Entities db = new paragraph16Entities()) 
      { 
       formulasList = new ObservableCollection<Formulas>(db.Formulas.Join(db.Input_Field_Formulas 
        .Where(x => x.input_field_id == inputFieldId).OrderByDescending(x => x.sort_order), 
        a => a.formula_id, 
        b => b.formula_id, 
        (a, b) => new { Formulas = a, Input_Field_Formulas = b }) 
        .Select(a => a.Formulas) 
        .ToList()); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

     return formulasList; 
    } 

上記のLINQを変更するか、次のようなSQLをLINQに変換できますか?

SELECT Formulas.formula_id, Formulas.formula_name 
FROM Formulas 
JOIN Input_Field_Formulas ON Input_Field_Formulas.formula_id = Formulas.formula_id 
WHERE Input_Field_Formulas.input_field_id = 49 
ORDER BY Input_Field_Formulas.sort_order; 

ありがとうございます!

答えて

1

この方法を試してみてください:

formulasList = new ObservableCollection<Formulas>(db.Formulas.Join(db.Input_Field_Formulas 
.Where(x => x.input_field_id == inputFieldId), 
a => a.formula_id, 
b => b.formula_id, 
(a, b) => new { Formulas = a, Input_Field_Formulas = b }) 
.OrderByDescending(x => x.Input_Field_Formulas.sort_order) 
.Select(a => a.Formulas) 
.ToList()); 
+0

どうもありがとうルスラン!それは動作します。私は30分前に似たようなことを試みましたが、テーブルInput_Field_Formulasへの新しい参照の代わりに略語 "b"を使用しました。 –

関連する問題