1

私のクラスの関係:ClassMaster 1 ---- * ClassSessions
私の目標:StartDateTimeが現在の日付よりも大きいClassSessionsを持つすべてのClassMastersと、これらのClassSessions(日付でフィルタリング)を返します。

T-SQLでは、次のようにします。

select *
   from ClassSession
   join ClassMaster on ClassMaster.ClassId = ClassSession.ClassId
   Where ClassSession.StartDateTime > getdate()

EntityFramework4クエリでも同じ結果を実現する必要があります。これは私がそれがうまくいくと思ったものですが、そうではありません:

   var classes = ctx.ClassSessions
                 .Include("ClassMasters")
                 .Where(s => s.StartDateTime > DateTime.Now)
                 .Select(s => s.ClassMaster)
                 .ToList();

これにより、StartDateTime>現在の日付のClassSessionを持つすべてのClassMasterが得られますが、ClassSessionsプロパティには、現在の日付より古いものを含むすべてのClassSessionが含まれています。StartDateTime>現在の日付のClassSessionsのみが必要です。

私は何が間違っているのですか?

どうもありがとうございます!

4

1 に答える 1

0
var masters = ctx.ClassMasters
         .Where(cm => cm.ClassSessions.Any(cs => cs.StartDateTime > DateTime.Now))
         .Select(cm => new { ClassMaster = cm, ClassSessions = cm.ClassSessions.Where(cs => cs.StartDateTime > DateTime.Now)
         .ToList().Select(e => e.ClassMaster);

コンテキスト内のどこかにすべてのClassSessionオブジェクトをロードした場合でも、これを行うことができます。

var masters = ctx.ClassMasters
         .Where(cm => cm.ClassSessions.Any(cs => cs.StartDateTime > DateTime.Now))
         .Select(cm => new ClassMasterWithSessionModel{ ClassMaster = cm, ClassSessions = cm.ClassSessions.Where(cs => cs.StartDateTime > DateTime.Now)
         .ToList();

public class ClassMasterWithSessionModel {
    ClassMaster ClassMaste { get; set; }
    IEnumerable<ClassSession> ClassSessions { get; set; }
}
于 2011-02-18T16:05:36.343 に答える