возвращение списков linq to sql - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть несколько запросов, которые выглядят так:

public List<AnObjectModel> GetObjectFromDB(TheParameters)
{
   using MyDataContext
   {
     var TheList = (....select new AnObjectModel()...).ToList();
     return new List<AnObjectModel>(TheList);
   }
}

И они работают просто отлично.Мой вопрос таков: на данный момент я использую var, а затем я выполняю каст.Будет ли это иметь какое-то преимущество в производительности?

   public List<AnObjectModel> GetObjectFromDB(TheParameters)
    {
       using MyDataContext
       {
         List<AnObjectModel> TheList = (....select new AnObjectModel()...).ToList();
         return TheList;
       }
    }

Мне потребовалось бы около 20 минут, чтобы внести изменения, и мне интересно, будет ли какая-либо разница.

Спасибо.

Ответы [ 5 ]

7 голосов
/ 01 февраля 2012

Вы не используете приведение - вы создаете новый список. Это определенно бессмысленно, учитывая, что вы уже получили только что созданный List<T>. Я бы просто написал:

return (....select new AnObjectModel()...).ToList();

Или вполне возможно:

var query = from ...
            select new AnObjectModel { ... };
return query.ToList();

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

Редактируйте в соответствии со вкусом макета, но обязательно удалите создание избыточного списка.

2 голосов
/ 01 февраля 2012

Это совершенно бесполезно. TheList уже как List<AnObjectModel>, потому что var выводится компилятором , что означает, что среда выполнения не видит никакой разницы.

Другими словами:

List<AnObjectModel> TheList = (....select new AnObjectModel()...).ToList(); и var TheList = (....select new AnObjectModel()...).ToList(); - это один и тот же код.

Изменение, о котором вы думаете, может ухудшить вашу производительность, потому что вы создадите второй список и скопируете все содержимое из первого списка во второй!

0 голосов
/ 01 февраля 2012

Вы не читаете, вы вызываете конструктор копирования списка, что означает, что вы делаете копию списка и возвращаете копию.Так что да, быстрее вернуть список напрямую, чем возвращать только что созданную копию.

0 голосов
/ 01 февраля 2012

Ваш второй пример подразумевает, что вы уже получаете список типа List<AnObjectModel> в качестве возвращаемого типа. (Потому что во втором примере вы не делаете каст)

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

public List<AnObjectModel> GetObjectFromDB(TheParameters)
{
   using MyDataContext
   {
     return (....select new AnObjectModel()...).ToList();
   }
}
0 голосов
/ 01 февраля 2012

var - это операция времени компиляции, поэтому ваш intellisense по-прежнему работает правильно. Использование var vs List - то же самое во время выполнения. Однако удаление создания списка из исходного списка, скорее всего, повысит производительность.

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