2017-11-07 14 views
0

exhibitsには特定の順序のIDが含まれています。 exhibit IDに基づいてBMIのIDを取得するために別のテーブルをクエリすると、その順序は同じになりません。最初の文書IDをexhibitにするのではなく、同じexhibitというIDを持つデータベースの最初のレコードを取得していると思いますが、データベースのレコードをexhibitsのIDと同じ順序で取得します。別のリスト内のアイテムに基づいて同じリスト内のアイテムを選択します。

var exhibits = _context.ApExhibits.Where(x => x.CASE_ID == apDockets.CASE_ID) 
    .Where(x => x.EXHIBIT_NBR != null) 
    .Where(x => !documents617.Contains(x.DOC_ID)) 
    .OrderBy(x => x.EXHIBIT_NBR) 
    .Select(x => x.DIM_ID).ToList(); 

if (exhibits.Count > 0) 
{ 
    var bmiIds = 
     _context.DocumentImages.Where(x => exhibits.Contains((int)x.DIM_ID)) 
      .Select(x => (int)x.BMI_ID).ToList(); 
} 
+0

'.OrderBy(X => x.EXHIBIT_NBR)1次回()'?それが存在するという前提。 –

答えて

0

それはあなたの最初のコレクションのように思えるexhibitsあなたが_context.DocumentImagesあなたは同じプロパティでそれを注文していない、ので、あなたがのために基づいて結果を受け取るつもり照会するときのに対しEXHIBIT_NBRに基づいて順序付けされますこの場合のソースシーケンスの要素は_context.DocumentImagesです。本質的には、コレクション内で直線的に検索し、指定された条件を満たす要素がある場合は、ソースシーケンスの要素 ""を保持して、ソースシーケンスDocumentImagesの要素を指定してと指定します。

それではWhere句に渡されるソースシーケンスDocumentImagesからの最初の要素がコレクションexhibitsから素子の等価idを持っていますが、exhibitsの要素は、この要素を行います、5th位置に言っているとしましょうソースリストの最初の要素であるToList()を実行すると、の一致要素も5thの位置にある場合、メソッドの操作が5thの結果リストになるはずですが、メソッドの操作はとなります。

のでexhibitsと同じ順序である要素を持つために、一つの解決策はに、内側では、1、コレクション内の1つの要素が別の内に含まれているかどうかをチェックするのと同等になりDocumentImagesexhibitsコレクションに参加します。その後、exhibitsと同じプロパティで注文できます。クエリ構文で

例:流暢な構文で

var bmiIds = (from e in _context.ApExhibits 
       join x in _context.DocumentImages on e.DIM_ID equals (int)x.DIM_ID 
       where exhibits.Contains((int)x.DIM_ID) 
       orderby e.EXHIBIT_NBR 
       select (int)x.BMI_ID).ToList(); 

例:

var bmiIds = _context.ApExhibits 
        .Join(_context.DocumentImages, 
          e => e.DIM_ID, 
          x => (int)x.DIM_ID, 
         (e, x) => new { e.EXHIBIT_NBR, x.BMI_ID }) 
        .Where(x => exhibits.Contains((int)x.DIM_ID)) 
        .OrderBy(e => e.EXHIBIT_NBR) 
        .Select(x => (int)x.BMI_ID).ToList(); 
関連する問題