2011-08-10 5 views
1

J'ai commande - Tableau clientsLazy Loading mvc3

J'utilise le chargement par le laz pour obtenir des informations sur les clients.

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

j'ai donc tiré ORDER AVEC LES CLIENTS CONNEXES

I HAVE customerID VALEURS CUSTOMERCITY à partir des valeurs formulaire

MAINTENANT Ma tâche est de vérifier si customerid et customercity existent dans le ordercustomer (résultat du linq)

à quoi ressemblerait la requête linq?

+1

Vous pourriez faire mieux de fournir plus d'échantillon de code. Par exemple, d'où 'id' vient-il dans votre clause where, quelque part dans votre modèle, controller? En outre, utilisez la démarque StackOverflow fournit. Par exemple, le code est fait par 4 espaces d'indentation. Je vais modifier votre message pour montrer un exemple. –

Répondre

0

Je pense que vous vous demandez quelque chose comme ceci:

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

Cela produira une valeur true ou false qui vous indique si l'ordre donné a un client qui lui est associé qui a l'ID donné et la ville . Si la commande n'existe pas, une exception sera générée. Sur une note de côté, lors de l'utilisation, utilisez .Include, cela s'appelle eager chargement. C'est le contraire de chargement paresseux. De plus, notez que votre requête d'origine ne contient aucun client, car vous ne l'avez pas encore évalué en appelant le .ToList ou quelque chose de similaire. Dans la requête que j'ai fournie, vous n'êtes pas obligé d'utiliser .Include car il n'y a aucune raison de charger toutes les données Client en mémoire, lorsque la base de données peut faire ce travail pour vous.

0

Vous n'avez pas besoin d'une requête LINQ, mais @StriplingWarrior l'a dans sa réponse.

Je ne peux pas deviner exactement comment vos valeurs de formulaire existent, parce que vous ne nous l'avez pas dit, mais je suppose que c'est dans un view model comme décrit ci-dessous. Si ce n'est pas, il devrait probablement être;)

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

Je suppose également que cette logique se produit dans une action du contrôleur. Ce n'est probablement pas le meilleur endroit, mais pourrait le mettre là.

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

S'il vous plaît noter que j'ai modifié vos Orders et Customers collections à capitaliser.

Questions connexes