C# 使用Linq从一个表中检索不在另一个表中的所有项

C# 使用Linq从一个表中检索不在另一个表中的所有项,c#,sql-server,linq,C#,Sql Server,Linq,我有一个船舱和一个出租船舱 船级: public class Boat { [Key] public int BoatID { get; set; } public string BoatName { get; set; } } public class RentBoat { [Key] [Required] public int RentBoatID { get; set; } [ForeignKey("Boat")] pub

我有一个船舱和一个出租船舱

船级:

public class Boat
{
    [Key]
    public int BoatID { get; set; }

    public string BoatName { get; set; }
}
public class RentBoat
{
    [Key]
    [Required]
    public int RentBoatID { get; set; }
    [ForeignKey("Boat")]
    public int BoatID { get; set; }

    public bool IsOnRent { get; set; }

    public virtual  Boat Boat { get; set; }
}
租船级别:

public class Boat
{
    [Key]
    public int BoatID { get; set; }

    public string BoatName { get; set; }
}
public class RentBoat
{
    [Key]
    [Required]
    public int RentBoatID { get; set; }
    [ForeignKey("Boat")]
    public int BoatID { get; set; }

    public bool IsOnRent { get; set; }

    public virtual  Boat Boat { get; set; }
}
我想从数据库中获取不在RentBoats表中的所有船只

到目前为止,我的代码不起作用:

using (var db = new BoatContext())
{
    return db.Boats.Where(boat => !db.RentBoats.Any(x => x.IsOnRent == false)).ToList();

     //(from boats in db.Boats
     //           where !db.RentBoats.Any(x => x.IsOnRent == false)
     //           select boats).ToList();
}

没有任何查询正常工作。即使我在RentBoat表中有一项的IsOnRent列设置为1,这两项在数据库中都会返回所有船只。

您应该将LINQ更改为以下内容:

db.Boats.Where(boat => !db.RentBoats.Any(x => x.BoatID == boat.BoatID &&  
x.IsOnRent == true)).ToList();

您当前的查询正在尝试获取船只,以防所有船只都是出租的。

您应该将LINQ更改为以下内容:

db.Boats.Where(boat => !db.RentBoats.Any(x => x.BoatID == boat.BoatID &&  
x.IsOnRent == true)).ToList();

您当前的查询是试图获得船只,以防所有船只都是出租的。

谢谢您,先生!那很有效!。我完全忘记了身份证。意识到我把
!db.Boats
和'false'在同一语句中。再次感谢!谢谢你,先生!那很有效!。我完全忘记了身份证。意识到我把
!db.Boats
和'false'在同一语句中。再次感谢!它在实体框架上吗?从一艘船到另一艘船是否有导航属性?如果没有,是否可以添加?是,它的EF。船与船之间没有导航属性。是的,可以添加。你认为我应该让它更容易查询吗?我想这个问题看起来怎么样。查询看起来像db.Boats.Where(boat=>!boat.Rents.Any(rent=>rent.IsOnRent))是的。但是,当我向RentBoat表添加一个项目时,如果IsOnRent位于Boat表中,我不必更新两个表。在向RentBoat添加项目时,是否有方法遍历Boat表并修改Boat=>列:IsOnRent。我希望将查询保持在最小值。IsOnRent始终位于BoatRent实体中。Rents是关联RentBot实体的导航属性。是否在EntityFramwork上?从一艘船到另一艘船是否有导航属性?如果没有,是否可以添加?是,它的EF。船与船之间没有导航属性。是的,可以添加。你认为我应该让它更容易查询吗?我想这个问题看起来怎么样。查询看起来像db.Boats.Where(boat=>!boat.Rents.Any(rent=>rent.IsOnRent))是的。但是,当我向RentBoat表添加一个项目时,如果IsOnRent位于Boat表中,我不必更新两个表。在向RentBoat添加项目时,是否有方法遍历Boat表并修改Boat=>列:IsOnRent。我希望将查询保持在最小值。IsOnRent始终位于BoatRent实体中。租金是关联的RentBot实体的导航属性。