Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 排除MVC.net应用程序中Linq查询的日期_C#_Linq_Entity Framework - Fatal编程技术网

C# 排除MVC.net应用程序中Linq查询的日期

C# 排除MVC.net应用程序中Linq查询的日期,c#,linq,entity-framework,C#,Linq,Entity Framework,在asp.net MVC应用程序中,我试图找到有客人/客户的房间,客人在某个日期之前离开 客户端模型类具有外键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<Cl

在asp.net MVC应用程序中,我试图找到有客人/客户的房间,客人在某个日期之前离开

客户端模型类具有外键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; }
}
公共教室
{
public int RoomId{get;set;}
[显示(Name=“房间名称”)]
公共字符串名称{get;set;}
公共bool已禁用{get;set;}
公共列表客户端{get;set;}
}
公共类客户端
{
public int ClientId{get;set;}
public int RoomId{get;set;}
公共字符串RoomName{get;set;}
公共日期时间到达{get;set;}
公共日期时间出发{get;set;}
公共房间{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
  }
来自房间中的r
其中r.Disabled==false

//其中,r.Clients.disease如果将
客户
中的
房间
引用更改为虚拟,将
房间
中的
客户
引用更改为虚拟
ICollection
,会发生什么情况?这将有助于EF建立连接

请看这里:或者这里是朱莉娅·勒曼关于这个主题的介绍:

这应该使您能够重新添加注释掉的子句,它应该可以工作

编辑:实际上,注释掉的位应该根据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; }
}
公共教室
{
public int RoomId{get;set;}
[显示(Name=“房间名称”)]
公共字符串名称{get;set;}
公共bool已禁用{get;set;}
公共虚拟ICollection客户端{get;set;}
}
公共类客户端
{
public int ClientId{get;set;}
public int RoomId{get;set;}
公共字符串RoomName{get;set;}
公共日期时间到达{get;set;}
公共日期时间出发{get;set;}
公共虚拟房间{get;set;}
}

在您的评论之后,这个应该可以满足您的需要

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


&&r.Clients.All(client=>client.departure我想知道为什么我被否决了。我认为我写的是正确的,不是吗?(不是被否决的投票者,而是):问题是客户是一个列表。这个列表(作为列表)没有偏离属性。您的更正很好…但这不是真正的问题。但是如果他使用实体框架,并且它会自动进行连接(它会),那么客户不应该是一个列表。它应该是一个
虚拟ICollection
,它将解决这个问题!嗨-我也没有投反对票-但我要向你明显比我高的知识鞠躬-拉斐尔-当你说绝对不是时,你是否不同意多默斯的建议?我是LINQ的新手,希望从一开始就使用最佳实践,而不是捏造的东西。非常感谢,Mark@MarkTait:我说Dommer的建议是错误的,因为客户端没有属性偏离。客户端是客户端的列表,而不是客户端。因此您的代码甚至不会编译。您可以按照Dommer指出的更正(这是一个好主意),但这不会改变您查询中的任何内容:它不会编译。请参阅我的答案,并查看差异。您好-我想返回一个房间列表,其中所有相关的客人/客户都在特定日期之前离开了-这样,我知道房间是免费的,我们可以为其分配另一个人,他们将需要它一段时间。然后什么时候分配后,他们的出发日期也将在特定日期之前排除该房间。这是一个恢复单元,可能会长期停留,而且房间可能在地理上是分开的-因此我需要确保管理员只列出可用的免费房间。谢谢你,MarkThank@Raphaeul Althaus和Dommer-我真的很感谢你你能帮我吗,马克
var dt = DateTime.Parse("2012-07-01");
&& r.Clients.All(client => client.Departure<=dt)