我有订单 - 客户表
我正在使用延迟加载来提取订单客户信息。
var ordercustomer = db.Orders.Include("customers").Where(c.orderid == id);
所以我已经撤销了相关客户的订单
我有来自表格值的CUSTOMERID,CUSTOMERCITY VALU
现在我的任务是检查客户和客户是否存在 ordercustomer(linq的结果)
linq查询怎么样?
答案 0 :(得分:0)
我认为你要求的是这样的东西:
db.Orders.Where(c => c.orderid == id)
.Select(c => c.customers.Any(
cu => cu.customerid == customerid && cu.customercity == customercity))
.Single();
这将生成一个true或false值,告诉您给定订单是否具有与其关联的客户,该客户具有给定的ID和城市。如果订单不存在,将抛出异常。
在旁注中,当使用.Include
时,称为急切加载。它与 lazy 加载相反。另请注意,您的原始查询实际上并未加载任何客户,因为您尚未通过调用.ToList
或类似内容对其进行评估。在我提供的查询中,您不需要使用.Include
,因为当数据库可以为您完成此工作时,没有理由将所有客户数据加载到内存中。
答案 1 :(得分:0)
您可能不需要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
个系列修改为大写。