你们可以告诉我这些方法之间的区别吗?
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 = (from tbBooking in db.Bookings
where tbBooking.BookingsID == id
select new Bookings
{
BookingsID = tbBooking.BookingsID,
CheckinDate = tbBooking.CheckinDate,
CheckoutDate = tbBooking.CheckoutDate,
CheckedIn = tbBooking.CheckedIn,
Room = tbBooking.Room,
HostelID = tbBooking.HostelID,
UserID = tbBooking.UserID
}).FirstOrDefault();
if (bookings == null)
{
return NotFound();
}
return Ok(bookings);
}
所以第一个运行正常,但第二个方法返回以下错误
类型' System.NotSupportedException'的例外情况发生在mscorlib.dll中,但未在用户代码中处理
附加信息:实体或复杂类型' MyProject.Models.Bookings'不能在LINQ to Entities查询中构造。
他们都没有退回预订对象,因此应该是相同的吗?
我问的原因是我不断得到一个"序列包含多个元素"当在Azure上部署时使用第一个方法时出错,但是在本地运行时运行正常,所以我发现了一些网站,我发现第一个orrrfault()到LINQ查询,所以我必须包含linq查询但是我的问题现在是上面的错误。
Ahy的想法/建议会很棒!
答案 0 :(得分:2)
从逻辑上讲,没有任何区别可以从数据库中找到具有该特定条件的记录。
在第二种情况下,您可以在一行中执行此类操作,具有更高的可读性,而不是编写如此多的行:
Bookings bookings = db.Bookings.FirstOrDefault(x=>x.BookingsID == id);
或者如果你想这样做那么你也可以这样做:
Bookings bookings = (from tbBooking in db.Bookings
where tbBooking.BookingsID == id
select tbBooking).FirstOrDefault();
不需要创建新对象,因为属性都是相同的,也是类型。
答案 1 :(得分:1)
答案 2 :(得分:-1)
在第一种情况下,
预订预订= db.Bookings.Find(id);
这不是正确的做法。查找应该具有与参数相同的对象作为对象列表。
例如: db.Bookings是List<预订>
那么代码应该是这样的
Bookings bookings = db.Bookings.Find(bookingsObj);
OR
Bookings bookings = db.Bookings.Find(x=> x.BookingsID==id);