次の (簡略化された) クラスが与えられます。
public class Master
{
public int Id { get; set; }
public string UniqueName { get; set; }
public virtual List<Detail> Details { get; set; }
}
public class Detail
{
public int Id { get; set; }
public string UniqueCode { get; set; }
}
Linq to Entities を使用して、Master の UniqueName と Detail の UniqueCode を指定して、特定の Detail インスタンスを選択するにはどうすればよいですか?
Detail から Master へのナビゲーション プロパティがないことに注意してください。
ナビゲーション プロパティがあれば、次のようなことができると思います。
Detail detail = (from m in ctx.Master.Include(p=>p.Details)
join d in ctx.Details
on m.Id = d.MasterId
where m.UniqueName == "Something" && d.UniqueCode == "Else"
select d).SingleOrDefault();
Detail から Master へのそのナビゲーション プロパティがなければ、最初にその Master のすべての Detail インスタンスを含む Master をフェッチし、次に Detail インスタンスを反復せずに続行する方法がわかりません。特定のマスターに多数の Detail インスタンスがある場合、これは非常に非効率的です。