C# 返回相同值的这两种方法之间的差异?
嗨,有人能告诉我这些方法的区别吗C# 返回相同值的这两种方法之间的差异?,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,嗨,有人能告诉我这些方法的区别吗 public IHttpActionResult GetBookings(int id) { Bookings bookings = db.Bookings.Find(id); if (bookings == null) { return NotFound(); } return Ok(bookings); } 及
public IHttpActionResult GetBookings(int id)
{
Bookings bookings = db.Bookings.Find(id);
if (bookings == null)
{
return NotFound();
}
return Ok(bookings);
}
及
因此,第一个方法运行良好,但第二个方法返回以下错误
mscorlib.dll中发生“System.NotSupportedException”类型的异常,但未在用户代码中>处理
其他信息:无法在LINQ to Entities查询中>构造实体或复杂类型“MyProject.Models.Bookings”
它们是否都不返回bookings对象,因此应该相同
我问的原因是,当在Azure上部署第一个方法时,我不断收到“Sequence contains more one element”错误,但在本地运行时运行良好,因此许多网站我找到了LINQ查询的FirstOrDefault()的解决方案,因此我不得不包括LINQ查询,但我现在的问题是上述错误
啊,我的想法/建议太好了 从逻辑上讲,两者都将从数据库中找到具有该特定条件的记录 在第二种情况下,您可以在一行中这样做,而不是像这样写那么多行:
Bookings bookings = db.Bookings.FirstOrDefault(x=>x.BookingsID == id);
或者,如果你想这样做,你也可以这样做:
Bookings bookings = (from tbBooking in db.Bookings
where tbBooking.BookingsID == id
select tbBooking).FirstOrDefault();
无需创建新对象,因为属性和类型都相同。在第一种情况下
Bookings Bookings=db.Bookings.Find(id)
这不是正确的做法。“查找”的对象应与“对象列表”的参数具有相同的对象
例如:
db.预订是列表<预订>
那么代码应该是这样的
Bookings bookings = db.Bookings.Find(bookingsObj);
或
您不需要选择。您正在尝试使用EF实体在EF查询中创建EF实体的新实例。很高兴为您提供帮助…:)
Bookings bookings = db.Bookings.Find(bookingsObj);
Bookings bookings = db.Bookings.Find(x=> x.BookingsID==id);