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);