2012-02-01 2 views
-1

У меня есть некоторые вопросы, которые выглядят следующим образом:LINQ к SQL возвращения списков

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 минут, чтобы внести изменения, и мне интересно, будет ли какая-то разница.

Спасибо.

+0

Возможный дубликат http://stackoverflow.com/questions/356846/c-sharp-var-vs-specific-type-performance – Matten

ответ

7

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

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

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

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

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

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

+0

Хорошо, спасибо Jon за подсказку. – frenchie

2

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

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

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

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

+0

За исключением того, что его текущий пример с использованием 'var' создает один дополнительный список и копирует данные в Это. В идеале это должно быть: 'return (.... select new AnObjectModel() ...). ToList();' –

+0

@DarkFalcon: Я знаю. См. Текущую версию ответа. –

0

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

0

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

Таким образом, вы можете сделать

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

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

Смежные вопросы