データを取得するために必要なテーブルが2つあります...部屋と住所。RoomsテーブルにはAddressIDフィールドが含まれていますが、nullの可能性があるため、関係は0から1です。特定のRoomとアドレス情報(存在する場合)を返すLINQステートメントを作成しようとしています。私のモデルは次のように定義されています:
public partial class Room
{
public Room()
{
this.Address = new HashSet<Address>();
}
public int RoomID { get; set; }
public Nullable<int> AddressID { get; set; }
public string Comments { get; set; }
public string Notes { get; set; }
public virtual ICollection<Address> Address { get; set; }
}
linqステートメントで.Include( "Address")を使用しようとしましたが、機能しませんでした。これは、Joinステートメントが原因であると考えられます(使用すると、黙ってインクルードが削除されます)。
これは醜い方法ですが、もっと良い方法があることを私は知っています:
var csdDB = new CSDContext(CustomerCode);
IList<Room> rooms = (from r in csdDB.Rooms
join sr in csdDB.SiteRooms
on r.RoomID equals sr.RoomID
where sr.SiteID == id
orderby r.RoomName
select r).ToList<Room>();
int? addressID = rooms.FirstOrDefault<Room>().AddressID;
if (addressID != null)
{
IList<Address> address = (from a in csdDB.Addresses
where a.AddressID == addressID
select a).ToList<Address>();
rooms.FirstOrDefault<Room>().Address = address;
}
結果に対して直接フィルタリングを実行しようとしました。
IList<Address> address = (from a in csdDB.Addresses
where a.AddressID == rooms.FirstOrDefault().AddressID
select a).ToList<Address>();
しかし、それはエラーをスローします:
Unable to create a constant value of type 'Models.CSD.Room'. Only primitive types or enumeration types are supported in this context.
これをよりクリーン/より良いものにする方法についての提案は大歓迎です!