2011-08-13 12 views
0

LOCAL to ENTITYを使用するPOCOで同じPOCOのHashSetプロパティから最初のオブジェクトを引き出すプロパティを使用しようとしています。私のオブジェクトには、次のものが含まれていますpocoのサブクエリを使用してプロパティを埋め込む

public virtual HashSet<ScheduleWaypoint> ScheduleWaypoints { get; set; } 

public ScheduleWaypoint ArrivalStation { 
     get { 
      if (this.ScheduleWaypoints != null && this.ScheduleWaypoints.Count() > 0) { 
       return this.ScheduleWaypoints.Where(row => row.WaypointType.Type.Trim() == "SA").OrderByDescending(row => row.ScheduledTime).First(); 
      } else 
       return null; 
     } 
    } 

私はこれがうまくいく場合、私は確かに言うことができないだけで一つのオブジェクトを使用していたが、私はそれが他のLINQクエリの内部で動作しないことがわかっている場合。オブジェクトを作成するときにScheduleWaypointのIDにアクセスすることはできません。これを働かせる方法はありますか?今すぐ通知しています:

指定された型メンバー 'ArivalStation'は、LINQから エンティティではサポートされていません。イニシャライザ、エンティティメンバ、およびエンティティナビゲーションの プロパティのみがサポートされています。

情報が必要なときに常にジョインするのではなく、プロパティに関するこの情報にアクセスするためにできることはありますか?

ありがとうございました。

答えて

0

linq-to-entitiesクエリでカスタムプロパティを使用することはできません。データベースに直接マップされたプロパティのみを使用できます。あなたのArrivalStationを返すlinq-to-entitiesクエリに直接サブクエリを持たなければなりません。

public static IQueryable<ScheduleWaypoint> GetArrivalStation(this IQueryable<ScheduleWaypoints> waypoints, int routeId) 
{ 
    return waypoints.Where(w => w.WaypointType.Type.Trim() == "SA" && w.Route.Id == routeId) 
        .OrderByDescending(w => w.ScheduledTime) 
        .FirstOrDefault(); 
} 

Routeは道ポイントが定義されている、あなたの主なエンティティです:おそらくそれは、単純な拡張メソッドとしてラップすることができます。サブクエリではFirstを使用できないため、FirstOrDefaultが使用されます。

+0

私はそれのようないくつかの制約の下にあると思ったが、それが何であるかを知らなかった。その解決策が私にとってはうまくいくかどうかはわかりません。私がIQueryableを返すと、Where節でフィールドを使用するときにArrivalStationのフィールドを使用することはできません.Lineqの最初の "from"にはアクセスできないため、Joinを実行できませんパラメータとして使用します。私がスケジュールのコレクションを持っていて、すべてのArrivalStationsが必要な場合は、この方法でそれを達成する方法がわかりますか? – SenseiHitokiri

関連する問題