2011-08-10 237 views
1

我有訂單 - 客戶表延遲加載mvc3

我使用lazyloading拉取訂單客戶信息。

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

,所以我已經拉到以便與相關客戶

我有CUSTOMERID,從表單CUSTOMERCITY值的值

我現在的任務是檢查客戶ID和customercity是否存在於 ordercustomer( linq的結果)

linq查詢將如何看起來像?

+1

您可能會做得更好,以提供更多的代碼示例。例如,id在哪裏來自where子句,模型中的某個地方,控制器?此外,使用降價StackOverflow提供。例如,代碼由4個縮進空格完成。我將編輯您的帖子以顯示示例。 –

回答

0

我想你問的是這樣的:

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

這將產生一個真或假的值,它會告訴你給定的順序是否有與它關聯的客戶具有給定ID和城市。如果訂單不存在,則會拋出異常。

附註中,使用時使用.Include,即渴望加載。這與懶惰加載相反。此外,請注意,您的原始查詢實際上並沒有加載任何客戶,因爲您尚未通過調用.ToList或類似方法對其進行評估。在我提供的查詢中,您不需要使用.Include,因爲當數據庫可以爲您完成這項工作時,沒有理由將所有客戶數據加載到內存中。

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

請注意,我已經修改了你的OrdersCustomers集合資本化。