2016-04-27 16 views
0

は、以下のクエリで子テーブルの列に条件を適用できますか?Linq - 子テーブルの条件

患者がメインテーブルであり、私は列を含む条件がで

Where(a => a.Date >= startdate && a.Date < stopdate && a.patient.assess.column1 == 10) 

フルクエリ

=> dc.Patient 
     .Include("first") 
     .Select(a => new 
     { 
      Patient = a, 
     Date = a.Assess.Max(x => x.Date), 
     M3 = a.M3, 
     Assess = a.Assess, 
     Details = a.Assess 
        .Select(x => new 
      { 
       x.Key, 
      x.Team 
      }) 
     }) 
     .Where(a => a.Date >= startdate && a.Date < stopdate) 
     .OrderBy(a => a.Date) 
     .Take(batchSize) 
     .ToList() 
    ); 
+0

関係は1対多ですか?子供の1人に価値10があり、別の子供に価値20がある場合はどうなりますか?クエリに親を含めたいですか? –

+1

子供が値10を持つようにするには、 'a.Assess.Any(x => x.column1 == 10)'という条件を使用できます。 –

答えて

1
あなたは追加のサブを使用することができます

/埋め込まれたラムダのようなテーブルを評価する場合について補足する必要がありますラムダ内のステートメントこの場合、IEnumerable.AnyステートメントはWhereステートメント内で参照できます。 anyは、ラムダに一致する条件があり、Assessがコレクションであると呼び出すことができる場合、trueを返します。

私の仮定は以下の通りであった。

  • Assessあなたは財産columnがの値に等しかったコレクション内の任意のAssessインスタンスがあった場合いずれかがWhere句が一致したかった厳密に型指定されたコレクション
  • です10

コード:

=> dc.Patient 
    .Include("first") 
    .Select(a => new 
    { 
     Patient = a, 
     Date = a.Assess.Max(x => x.Date), 
     M3 = a.M3, 
     Assess = a.Assess, 
     Details = a.Assess.Select(x => new 
     { 
      x.Key, 
      x.Team 
     }) 
    }) 
    .Where(a => a.Date >= startdate && a.Date < stopdate && a.Assess.Any(ass => ass.column1 == 10)) 
    .OrderBy(a => a.Date) 
    .Take(batchSize) 
    .ToList() 
); 
+0

ありがとうございました。感謝。 – chint

+0

@chint - 喜んで助けました。また、あなたの質問に答えがある場合、あなたが最も気に入ったと感じたことがあれば、その答えの横にあるチェックマークを使って答えとしてマークしてください(チェックが緑色に変わります)。あなたは、各質問の「正しい」と答えて1つだけマークすることができます。 – Igor