Ленивая загрузка MVC3 - PullRequest
       6

Ленивая загрузка MVC3

1 голос
/ 10 августа 2011

У меня есть заказ - Таблица клиентов

Я использую ленивую загрузку для получения информации о заказчиках.

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

, поэтому я вытащил ЗАКАЗ С СВЯЗАННЫМИ КЛИЕНТАМИ

У меня есть CUSTOMERID, значения клиента из значений формы

СЕЙЧАС МОЯ ЗАДАЧА проверить, существуют ли обычаи и клиенты в заказ клиента (результат linq)

как будет выглядеть запрос linq?

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

Вам может не понадобиться запрос LINQ, но у @StriplingWarrior он есть в его ответе.

Я не могу точно догадаться, как существуют значения вашей формы, потому что вы не сказали нам, но я предполагаю, что это модель представления , как описано ниже.Если это не так, то, вероятно, так и должно быть;)

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, чтобы они стали заглавными.

0 голосов
/ 11 августа 2011

Я думаю, вы просите что-то вроде этого:

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

Это даст истинное или ложное значение, которое сообщит вам, связан ли с данным заказом клиент с указанным идентификатором и городом. Если порядок не существует, будет сгенерировано исключение.

Примечание: при использовании используйте .Include, это называется eager loading. Это противоположно ленивая загрузка. Также обратите внимание, что в исходном запросе на самом деле еще не загружен ни один из клиентов, потому что вы не оценили его, вызвав .ToList или что-то подобное. В предоставленном мною запросе вы не обязаны использовать .Include, поскольку нет никакой причины загружать все данные о клиентах в память, когда база данных может выполнить эту работу за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...