【问题标题】:Lazy Loading mvc3延迟加载 mvc3
【发布时间】:2011-08-11 05:08:56
【问题描述】:

我有订单 - 客户表

我正在使用延迟加载来提取订单客户信息。

var ordercustomer = db.Orders.Include("customers").Where(c.orderid == id);

所以我已经与相关客户下订单

I HAVE CUSTOMERID ,CUSTOMERCITY VALUES 来自表单值

现在我的任务是检查 customerid 和 customercity 是否存在于 ordercustomer(linq 的结果)

linq 查询是什么样的?

【问题讨论】:

  • 您最好提供更多代码示例。例如,id 来自您的 where 子句中的哪里,在您的模型中的某个地方,控制器?此外,使用 StackOverflow 提供的降价。例如,代码由 4 个缩进空格完成。我将编辑您的帖子以显示示例。

标签: linq asp.net-mvc-3


【解决方案1】:

我认为您要求的是这样的:

db.Orders.Where(c => c.orderid == id)
    .Select(c => c.customers.Any(
        cu => cu.customerid == customerid && cu.customercity == customercity))
    .Single();

这将产生一个真值或假值,告诉您给定订单是否有与其关联的客户,该客户具有给定的 ID 和城市。如果订单不存在,则会抛出异常。

附带说明,当使用 .Include 时,这称为 eager 加载。它与 lazy 加载相反。另外,请注意,您的原始查询实际上还没有加载任何客户,因为您尚未通过调用 .ToList 或类似的方式对其进行评估。在我提供的查询中,您不需要使用.Include,因为当数据库可以为您完成这项工作时,没有理由将所有客户数据加载到内存中。

【讨论】:

    【解决方案2】:

    您可能不需要 LINQ 查询,但 @StriplingWarrior 在他的回答中有它。

    我无法准确猜测您的表单值是如何存在的,因为您没有告诉我们,但我会假设它位于 view model 中,如下所述。如果不是,它可能应该是;)

    public class OrderCustomerViewModel
    {
        public int CustomerID { get; set; }
        public string CustomerCity { get; set; }
    }
    

    我还将假设此逻辑发生在控制器操作中。这可能不是最好的地方,但你可以把它放在那里。

    public class CustomerController : Controller
    {
        [HttpPost]
        public ActionResult CheckCustomer(OrderCustomerViewModel vm)
        {
            var ordercustomer = db.Orders.Include("Customers").Where(c.orderid == id);
            bool customerFound = false;
            foreach(var customer in ordercustomer.Customers)
            {
                if(customer.CustomerID == vm.CustomerID &&
                   customer.CustomerCity == vm.CustomerCity)
    
                    customerFound = true;
            }
    
            // now, do whatever you need to with customerFound
            ViewBag.CustomerFound = customerFound;
            return View();
        }
    }
    

    请注意,我已将您的 OrdersCustomers 集合修改为大写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 2021-07-13
      相关资源
      最近更新 更多