我有订单 - 客户表延迟加载mvc3
我使用lazyloading拉取订单客户信息。
var ordercustomer = db.Orders.Include("customers").Where(c.orderid == id);
,所以我已经拉到以便与相关客户
我有CUSTOMERID,从表单CUSTOMERCITY值的值
我现在的任务是检查客户ID和customercity是否存在于 ordercustomer( linq的结果)
linq查询将如何看起来像?
我有订单 - 客户表延迟加载mvc3
我使用lazyloading拉取订单客户信息。
var ordercustomer = db.Orders.Include("customers").Where(c.orderid == id);
,所以我已经拉到以便与相关客户
我有CUSTOMERID,从表单CUSTOMERCITY值的值
我现在的任务是检查客户ID和customercity是否存在于 ordercustomer( linq的结果)
linq查询将如何看起来像?
我想你问的是这样的:
db.Orders.Where(c => c.orderid == id)
.Select(c => c.customers.Any(
cu => cu.customerid == customerid && cu.customercity == customercity))
.Single();
这将产生一个真或假的值,它会告诉你给定的顺序是否有与它关联的客户具有给定ID和城市。如果订单不存在,则会抛出异常。
附注中,使用时使用.Include
,即渴望加载。这与懒惰加载相反。此外,请注意,您的原始查询实际上并没有加载任何客户,因为您尚未通过调用.ToList
或类似方法对其进行评估。在我提供的查询中,您不需要使用.Include
,因为当数据库可以为您完成这项工作时,没有理由将所有客户数据加载到内存中。
您可能不需要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();
}
}
请注意,我已经修改了你的Orders
和Customers
集合资本化。
您可能会做得更好,以提供更多的代码示例。例如,id在哪里来自where子句,模型中的某个地方,控制器?此外,使用降价StackOverflow提供。例如,代码由4个缩进空格完成。我将编辑您的帖子以显示示例。 –