1

asp.net MVC アプリ内で、ゲストが特定の日付より前に出発するゲスト/クライアントがいる部屋を見つけようとしています。

Client モデル クラスには外部キー RoomId があります。

public class Room
{
    public int RoomId { get; set; }
    [Display(Name = "Room Name")]
    public string Name { get; set; }
    public bool Disabled { get; set; }
    public List<Client> Clients { get; set; }
}

public class Client
{
    public int ClientId { get; set; }
    public int RoomId { get; set; }
    public string RoomName { get; set; }
    public DateTime Arrival { get; set; }
    public DateTime Departure { get; set; }
    public Room Room { get; set; }
}

私の現在のLinqクエリは次のとおりです。

from r in Rooms
where r.Disabled == false
//where r.Clients.Departure<=DateTime.Parse("2012-07-01")
select new
  {
    r.Name,
    r.Disabled
  }

コメント行: //where r.Clients.Departure..... は、LinqPad で次のエラーを表示します。

'System.Data.Linq.EntitySet' には 'Departure' の定義が含まれておらず、タイプ 'System.Data.Linq.EntitySet' の最初の引数を受け入れる拡張メソッド 'Departure' が見つかりませんでした (F4 を押して using を追加します)ディレクティブまたはアセンブリ参照)

Linq 内で、このクエリを実行して Departure date where 句を除外する方法はありますか?

助けてくれてありがとう、

マーク

4

2 に答える 2

2

あなたのコメントの後、これはあなたが必要とすることをするはずです

&& r.Clients.All(client => client.Departure<=DateTime.Parse("2012-07-01"))

編集 :

たぶん、クエリから比較するために DateTime を宣言します

var dt = DateTime.Parse("2012-07-01");

&& r.Clients.All(client => client.Departure<=dt)
于 2012-07-05T09:00:50.943 に答える
0

の参照を virtual に変更し、 のRoom参照をClientvirtual に変更するとどうなりますか? これは、EF が接続を確立するのに役立ちます。ClientRoomICollection

ここを参照してください: http://msdn.microsoft.com/en-us/library/gg715120(v=vs.103).aspxまたは、件名に関する Julia Lerman からの何かについては、こちら: http://msdn.microsoft.com/ en-us/data/hh134698.aspx

これにより、コメントアウトされた句を再度追加できるようになり、機能するはずです。

編集: 実際には、コメントアウトされたビットは、Raphaël Althaus の修正に合わせて変更する必要があります。

私とラファエルが提案したことの組み合わせが最良のアプローチだと思います。

このような

public class Room
{
    public int RoomId { get; set; }
    [Display(Name = "Room Name")]
    public string Name { get; set; }
    public bool Disabled { get; set; }
    public virtual ICollection<Client> Clients { get; set; }
}

public class Client
{
    public int ClientId { get; set; }
    public int RoomId { get; set; }
    public string RoomName { get; set; }
    public DateTime Arrival { get; set; }
    public DateTime Departure { get; set; }
    public virtual Room Room { get; set; }
}
于 2012-07-05T09:00:39.603 に答える