繁体   English   中英

如何在实体框架中使用where子句?

[英]How to use the where clause in entity framework?

我正在尝试查询我的EF Code First数据库,因此它将返回当前登录用户进行的所有预订。 我不太了解语法的正确性,希望有人可以指出正确的方向。

我尝试实现此目标的两种不同方式:

List<Booking> bookings = new List<Booking>();
string userid = User.Identity.GetUserId();
foreach(var b in db.Bookings.Where(b => b.Customer.Id == userid))
{
    bookings.Add(b);
}
string userid = User.Identity.GetUserId();
var bookings = db.Bookings.Include(b => b.Customer).Include(b => b.Invoice).Include(b => b.Payment).Include(b => b.Vehicle).Where(b => b.Customer.Id == userid);
return View(bookings.ToList());

这些方式均未返回数据库中的任何预订,因此我确定我的逻辑在此处错误。 任何帮助,将不胜感激。

在第一个查询中,您忘了包括“客户”导航属性,因此客户总是失败,并且不会返回任何预订。

尽管在第二个查询中,您已包括客户,发票等! 在这种情况下,仅在客户预订了发票,付款等之后才返回客户。

此查询应与您一起使用:

string userid = User.Identity.GetUserId();
var bookings = db.Bookings
                 .Include(b => b.Customer)
                 .Where(b => b.Customer.Id == userid)
                 .ToList();

return View(bookings);

看来您使用的是启用了EagerMode的EF,因此您需要在where条件中Include客户或任何相关字段。

我的题外话推荐:

请不要返回直接从ORM获取的实体。 首先,将它们转换为DTO(使用AutoMapper或任何其他对象映射器)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM