エンティティにC#とLINQを使用すると、子エンティティと親エンティティの検索に問題があります。概念的には、これらの子が特定のプロパティを持ち、これらの子の親も特定のプロパティを持っているIEnumerable子のコレクションを取得しようとしています。
具体的には、多対多の関係にあるルートとストリートがあります。ストリートがLeftNoteまたはRightNoteの正のプロパティを持つ特定のルート上のストリートを検索しようとしています(LeftNoteとRightNoteは文字列であり、空のスペースではない文字列を検索しています)。
私は次のエンティティを持っています(明確にするために切り詰めました)
public class Route
{
public int RouteID { get; set; }
public virtual ICollection<Street> Streets { get; set; }
}
public class Street
{
public string LeftNote { get; set; }
public string RightNote { get; set; }
public virtual ICollection<Route> Routes { get; set; }
}
次のLINQ式があります。
var streets = this.repository.Routes
.Where(r => r.RouteID == routeId).FirstOrDefault()
.Streets
.Where(s => s.LeftNote.Length > 0 || s.RightNote.Length > 0);
これは、ルートが存在するが、LeftNotesまたはRightNotesがある通りがないエンティティデータに対してこれを実行するまでは完全に機能します。このような場合、NullReference例外が発生します。私は、LeftNotesでStreetsの不在を処理するこのクエリを適切に表現する方法を見つけようとしています(routeIdに一致するRouteが常に存在する必要があります。そうでない場合は、有効な例外ケースであり、スローしてエラーになります)。
編集:問題は、LINQ構造に関連するものではなく、null文字列に関連しているようです。