LINQ to Entities вопрос новичка - PullRequest
0 голосов
/ 10 апреля 2011

Я не опытный программист на C # и сейчас занимаюсь некоторыми вещами с EF 3.5 и LINQ.

У меня есть следующий метод, и я совершенно уверен, что он может быть написан лучше / короче.

Спасибо за помощь!

  public List<CustOrder> GetOrders(string supplierId, string locationId)
    {
        using (var ctx = new OrderEntities())
        {
            if (!string.IsNullOrEmpty(locationId))
            {
                var result = (from order in ctx.CustOrder
                              where order.SupplierId == supplierId
                                 && order.LocationId == locationId
                              select order).ToList();
                return result;
            }
            else
            {
                var result = (from order in ctx.CustOrder
                              where order.SupplierId == supplierId
                                 && order.LocationId != ""
                              select order).ToList();
                return result;              
            }
        }
    }

Моя ошибка: Во втором запросе linq следует удалить следующую строку:

&& order.LocationId != ""

Ответы [ 4 ]

4 голосов
/ 10 апреля 2011

Я бы порекомендовал эту версию, так как я считаю ее более читабельной, ИМХО.

public List<CustOrder> GetOrders(string supplierId, string locationId)
{
    using (var ctx = new OrderEntities())
    {
        var query = from order in ctx.CustOrder
                    where order.SupplierId == supplierId
                    select order;

        if (!string.IsNullOrEmpty(locationId))
        {
            query = query.Where(o => o.LocationId == locationId)
        }

        return query.ToList();
    }
}
0 голосов
/ 10 апреля 2011

Bala's выполняет проверку на ноль, а Talljoe выполняет проверку на пустую строку. Но этот делает оба:

 public List<CustOrder> GetOrders(string supplierId, string locationId)
 {
        using (var ctx = new OrderEntities())
        {
             var result = (from order in ctx.CustOrder
                                  where order.SupplierId == supplierId
                                     && ((String.IsNullOrEmpty(locationId) && order.LocationId == locationId) || 
                                         order.LocationId.Length > 0)
                                  select order).ToList();
             return result;
       }
 }

Кроме того, проверка длины строки обычно лучше проверки на равенство пустой строки.

0 голосов
/ 10 апреля 2011
var result = (from order in ctx.CustOrder
                          where order.SupplierId == supplierId
                             && (String.IsNullOrEmpty(locationId)
                               || order.LocationId == locationId)
                          select order).ToList();
            return result;
0 голосов
/ 10 апреля 2011

вы можете сделать

 public List<CustOrder> GetOrders(string supplierId, string locationId)
 {
        using (var ctx = new OrderEntities())
        {
             var result = (from order in ctx.CustOrder
                          where order.SupplierId == supplierId
                          && string.IsNullOrEmpty(locationId) ? true : order.LocationId == locationId
                                  select order).ToList();
             return result;
       }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...