我有訂單 - 客戶表延遲加載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個縮進空格完成。我將編輯您的帖子以顯示示例。 –